You are on page 1of 35

*&---------------------------------------------------------------------*

*& Include ZFAK_HR_INCOME_TAX_CALC


*&---------------------------------------------------------------------*

FORM FUZITAX.

TABLES: PA0002,
PA0014,
PA0015,
PA0267,
PA9325,
PA9315,
PA0045,
PA0078.

DATA: FINAL_PA9325 LIKE PA9325.


DATA: ITAB_WAGES LIKE STANDARD TABLE OF ZTAX_WAGES WITH HEADER LINE.
DATA: ITAB_LOANS LIKE STANDARD TABLE OF ZTAX_LOANS WITH HEADER LINE.
DATA: ITAB_PA0008 LIKE STANDARD TABLE OF PBWLA WITH HEADER LINE.
DATA: ITAB_PA0014 LIKE STANDARD TABLE OF PTBINDBW WITH HEADER LINE.
DATA: GROSS_SALARY LIKE STANDARD TABLE OF PTBINDBW WITH HEADER LINE.
DATA: MESSAGE_HANDLER TYPE REF TO IF_HRPA_MESSAGE_HANDLER.

DATA: ITAB TYPE PC2APER,


TAX_PERIODS LIKE ZTAX_PERIODS,
TAX_DETAILS LIKE ZTAX_DETAILS,

TAX_PERIOD LIKE ITAB-PAPER-PABRP,


PAY_PERIOD LIKE ITAB-PAPER-PABRP,
TAX_YEAR LIKE ITAB-PAPER-PABRJ,
TAX_MONTH LIKE ITAB-PAPER-PABRP,
OLD_END_DATE LIKE SY-DATUM,
FIRST_YEAR_DATE LIKE SY-DATUM,
LAST_YEAR_DATE LIKE SY-DATUM,
FIRST_MONTH_DATE LIKE SY-DATUM,
LAST_MONTH_DATE LIKE SY-DATUM,
REM_TAX_PERIODS TYPE P DECIMALS 2,
LAST_TAX_PERIOD TYPE P DECIMALS 2,
LEAVING_DATE LIKE SY-DATUM,

ANNUAL_AMNT TYPE ZBETRG,


ANNUAL_MD_AMNT TYPE ZBETRG,
MONTHLY_AMNT TYPE ZBETRG,
MONTHLY_AVG_AMNT TYPE ZBETRG,
BONUS_AMNT TYPE ZBETRG,
BONUS_AVG_AMNT TYPE ZBETRG,
EXEMPTED_AMNT TYPE ZBETRG,
PFUND_AMNT TYPE ZBETRG,
THIS_TIME_MONTHLY TYPE ZBETRG,
THIS_TIME_BONUS TYPE ZBETRG,

TAX_RETRO TYPE ZBETRG,


SALARY_RETRO TYPE ZBETRG,
MONTHLY_RETRO TYPE ZBETRG,
MONTHLY_AVG_RETRO TYPE ZBETRG,
BONUS_RETRO TYPE ZBETRG,
BONUS_AVG_RETRO TYPE ZBETRG,
PFUND_RETRO TYPE ZBETRG,
EXEMPT_RETRO TYPE ZBETRG,
PREV_SALARY_AMNT TYPE ZBETRG,
CURR_SALARY_AMNT TYPE ZBETRG,
PREV_MONTHLY_AMNT TYPE ZBETRG,
CURR_MONTHLY_AMNT TYPE ZBETRG,
PREV_MONTHLY_AVG_AMNT TYPE ZBETRG,
CURR_MONTHLY_AVG_AMNT TYPE ZBETRG,
PREV_BONUS_AMNT TYPE ZBETRG,
CURR_BONUS_AMNT TYPE ZBETRG,
PREV_BONUS_AVG_AMNT TYPE ZBETRG,
CURR_BONUS_AVG_AMNT TYPE ZBETRG,
PREV_PFUND_AMNT TYPE ZBETRG,
CURR_PFUND_AMNT TYPE ZBETRG,
PREV_EXEMPT_AMNT TYPE ZBETRG,
CURR_EXEMPT_AMNT TYPE ZBETRG,
EXEMPT_PERCENTAGE TYPE ZRATE,

TAXABLE_AMOUNT TYPE ZBETRG,


TAXABLE_BONUS TYPE ZBETRG,
EXEMPTED_AMOUNT TYPE ZBETRG,
PFUND_AMOUNT TYPE ZBETRG,

DIFF_PERCENT TYPE ZRATE,


LOAN_GRANTED TYPE PA0045-DARBT,
LOAN_EXEMPT TYPE ZTAX_LOANS-LEXEMPT,
LOAN_BALANCE TYPE ZBETRG,
LOAN_DEDUCTION TYPE ZBETRG,
LOAN_PAYMENTS TYPE ZBETRG,
LOAN_PREV_BALANCE TYPE ZBETRG,
LOAN_AMOUNT TYPE ZBETRG,

AGE_IN_YEARS LIKE P0347-SCRYY,


AGE_IN_DAYS LIKE P0347-SCRDD,
AGE_RELIEF_AMOUNT TYPE ZBETRG,

ANNUAL_TAX TYPE ZBETRG,


MONTHLY_TAX TYPE ZBETRG,
BONUS_TAX TYPE ZBETRG,
BONUS_TAX_MONTH TYPE ZBETRG,
TAX_LIABILITY TYPE ZBETRG,
TAX_ROUNDING TYPE INT4,

INV_IN_SHARES TYPE ZBETRG,


HEALTH_INS_PREM TYPE ZBETRG,
DONATION_CHARITY TYPE ZBETRG,
PFUND_CONTRIBUTION TYPE ZBETRG,

TAX_OVERRIDE_CHECK(1),
TAX_OVERRIDE_AMOUNT TYPE ZBETRG,

NEGATIVE_SALARY_CHECK(1),
NEGATIVE_SALARY_AMOUNT TYPE ZBETRG,

INC_GROSS_AMOUNT TYPE ZBETRG,


DEC_GROSS_AMOUNT TYPE ZBETRG,
INC_LIAB_AMOUNT TYPE ZBETRG,
DEC_LIAB_AMOUNT TYPE ZBETRG,

DONATIONS_AMOUNT TYPE ZBETRG,


DON_CHA_AMOUNT TYPE ZBETRG,
INV_SHARES_AMOUNT TYPE ZBETRG,
HIPREMIUMS_AMOUNT TYPE ZBETRG,
PENSION_CTR_AMOUNT TYPE ZBETRG,
MARK_UP_AMOUNT TYPE ZBETRG,

PREV_PFUND_LIMIT TYPE ZBETRG,


PREV_OLD_END_DATE LIKE SY-DATUM.

************************************************************************
************************************************************************

LOCAL: APER, RGDIR.

ITAB = APER.

***** Calculating Dates and Periods

IF ITAB-PAYTY = SPACE.

OLD_END_DATE = ITAB-ENDDA - 1.
PAY_PERIOD = ITAB-PAPER-PABRP.

ELSE.

IF ITAB-BONDT IS NOT INITIAL.

OLD_END_DATE = ITAB-BONDT - 1.

SELECT SINGLE PABRP FROM T549Q INTO PAY_PERIOD


WHERE BEGDA LE ITAB-BONDT AND
ENDDA GE ITAB-BONDT.

ELSE.

OLD_END_DATE = ITAB-ENDDA - 1.

SELECT SINGLE PABRP FROM T549Q INTO PAY_PERIOD


WHERE BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

ENDIF.

ENDIF.

SELECT SINGLE * FROM ZTAX_PERIODS INTO TAX_PERIODS


WHERE BEGDA LE ITAB-ENDDA
AND ENDDA GE ITAB-ENDDA
AND ABKRS EQ ITAB-ABKRS
AND PAY_PERIOD EQ PAY_PERIOD.

IF SY-SUBRC = 0 AND
TAX_PERIODS-TAX_IND = 'X'.

TAX_PERIOD = TAX_PERIODS-TAX_PERIOD.

IF TAX_PERIOD GE 1 AND TAX_PERIOD LE 6.


TAX_YEAR = ITAB-BEGDA(4).
CONCATENATE TAX_YEAR '0701' INTO FIRST_YEAR_DATE.
TAX_YEAR = TAX_YEAR + 1.
CONCATENATE TAX_YEAR '0630' INTO LAST_YEAR_DATE.
ELSE.
TAX_YEAR = ITAB-BEGDA(4) - 1.
CONCATENATE TAX_YEAR '0701' INTO FIRST_YEAR_DATE.
TAX_YEAR = TAX_YEAR + 1.
CONCATENATE TAX_YEAR '0630' INTO LAST_YEAR_DATE.
ENDIF.

******* Getting Last Income Tax Results

SELECT * FROM PA9325


WHERE PERNR = PERNR-PERNR AND
ENDDA GE FIRST_YEAR_DATE AND
ENDDA LE OLD_END_DATE
ORDER BY BEGDA.
ENDSELECT.

FINAL_PA9325-P_TAX_YTD = PA9325-TAX_YTD.
FINAL_PA9325-P_SALARY_YTD = PA9325-SALARY_YTD.
FINAL_PA9325-P_BONUS_YTD = PA9325-BONUS_YTD.
FINAL_PA9325-P_PFUND_YTD = PA9325-PFUND_YTD.
FINAL_PA9325-P_EXEMPTED_YTD = PA9325-EXEMPTED_YTD.

****** Gathering Data from Configuration Tables.

SELECT SINGLE * FROM ZTAX_DETAILS INTO TAX_DETAILS


WHERE MOLGA = '99' AND
BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

SELECT * FROM ZTAX_WAGES INTO TABLE ITAB_WAGES


WHERE BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

SELECT * FROM ZTAX_LOANS INTO TABLE ITAB_LOANS


WHERE BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

**** Getting Gender of Employee for Tax Rebate

SELECT SINGLE * FROM PA0002


WHERE PERNR EQ PERNR-PERNR AND
BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

******* Filling Tax Output Infotype

MOVE: ITAB-BEGDA TO FINAL_PA9325-BEGDA,


ITAB-ENDDA TO FINAL_PA9325-ENDDA,
PERNR-PERNR TO FINAL_PA9325-PERNR,
PAY_PERIOD TO FINAL_PA9325-P_PERIOD,
TAX_PERIOD TO FINAL_PA9325-T_PERIOD.

****** Negating Income Tax Effects from Retro Calculations

IF ITAB-CALCD NE SPACE.
IF ITAB-PAYTY = SPACE.

SELECT SINGLE * FROM PA0014 WHERE


PERNR = PERNR-PERNR AND
LGART = TAX_DETAILS-TAXWT AND
BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

IF SY-SUBRC NE 0.

SELECT SINGLE * FROM PA0015 WHERE


PERNR = PERNR-PERNR AND
LGART = TAX_DETAILS-TAXWT AND
BEGDA GE ITAB-BEGDA AND
BEGDA LE ITAB-ENDDA.

IF SY-SUBRC NE 0.

LOOP AT ORT WHERE LGART = TAX_DETAILS-TAXWT.


RT = ORT.
APPEND RT.
MOVE ORT-BETRG TO TAX_RETRO.
ENDLOOP.

IF TAX_RETRO NE 0.

LOOP AT DT WHERE LGART = '/551' AND


PAPER = ITAB-PAPER.
DT-BETRG = DT-BETRG + TAX_RETRO.
MODIFY DT.
ENDLOOP.

LOOP AT RT WHERE LGART = '/551'.


RT-BETRG = RT-BETRG - TAX_RETRO.
MODIFY RT.
ENDLOOP.

LOOP AT RT WHERE LGART = '/553'.


RT-BETRG = RT-BETRG - TAX_RETRO.
MODIFY RT.
ENDLOOP.

LOOP AT RT WHERE LGART = '/110'.


RT-BETRG = RT-BETRG + TAX_RETRO.
MODIFY RT.
ENDLOOP.
IF SY-SUBRC NE 0.
RT-LGART = '/110'.
RT-BETRG = TAX_RETRO.
RT-ANZHL = 0.
APPEND RT.
ENDIF.

ENDIF.

SORT RT BY ABART LGART.

ENDIF.
ENDIF.
ELSE.

SELECT SINGLE * FROM PA0267 WHERE


PERNR = PERNR-PERNR AND
LGART = TAX_DETAILS-TAXWT AND
BEGDA GE ITAB-BEGDA AND
BEGDA LE ITAB-ENDDA.

IF SY-SUBRC NE 0.

LOOP AT ORT WHERE LGART = TAX_DETAILS-TAXWT.


RT = ORT.
APPEND RT.
MOVE ORT-BETRG TO TAX_RETRO.
ENDLOOP.

IF TAX_RETRO NE 0.

LOOP AT DT WHERE LGART = '/551' AND


PAPER = ITAB-PAPER.
DT-BETRG = DT-BETRG + TAX_RETRO.
MODIFY DT.
ENDLOOP.

LOOP AT RT WHERE LGART = '/551'.


RT-BETRG = RT-BETRG - TAX_RETRO.
MODIFY RT.
ENDLOOP.

LOOP AT RT WHERE LGART = '/553'.


RT-BETRG = RT-BETRG - TAX_RETRO.
MODIFY RT.
ENDLOOP.

LOOP AT RT WHERE LGART = '/110'.


RT-BETRG = RT-BETRG + TAX_RETRO.
MODIFY RT.
ENDLOOP.
IF SY-SUBRC NE 0.
RT-LGART = '/110'.
RT-BETRG = TAX_RETRO.
RT-ANZHL = 0.
APPEND RT.
ENDIF.

ENDIF.

SORT RT BY ABART LGART.

ENDIF.
ENDIF.

ENDIF.

****** Adding Differences of Taxable Amounts in Retro

IMPORT SALARY_RETRO FROM MEMORY ID 'SALARY_RETRO'.


IMPORT MONTHLY_RETRO FROM MEMORY ID 'MONTHLY_RETRO'.
IMPORT MONTHLY_AVG_RETRO FROM MEMORY ID 'MONTHLY_AVG_RETRO'.
IMPORT BONUS_RETRO FROM MEMORY ID 'BONUS_RETRO'.
IMPORT BONUS_AVG_RETRO FROM MEMORY ID 'BONUS_AVG_RETRO'.
IMPORT PFUND_RETRO FROM MEMORY ID 'PFUND_RETRO'.
IMPORT EXEMPT_RETRO FROM MEMORY ID 'EXEMPT_RETRO'.

IF ITAB-CALCD NE SPACE.

****** Retro Effect in Salary

LOOP AT ITAB_WAGES WHERE TEVAL = SPACE.

LOOP AT ORT WHERE LGART = ITAB_WAGES-LGART.


PREV_SALARY_AMNT = PREV_SALARY_AMNT + ( ORT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
PREV_EXEMPT_AMNT = PREV_EXEMPT_AMNT + ( ORT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

LOOP AT RT WHERE LGART = ITAB_WAGES-LGART.


CURR_SALARY_AMNT = CURR_SALARY_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR / 100
).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
CURR_EXEMPT_AMNT = CURR_EXEMPT_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

ENDLOOP.

****** Retro Effect in Monthly_payments

LOOP AT ITAB_WAGES WHERE TEVAL = '1'.

LOOP AT ORT WHERE LGART = ITAB_WAGES-LGART.


PREV_MONTHLY_AMNT = PREV_MONTHLY_AMNT + ( ORT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
PREV_EXEMPT_AMNT = PREV_EXEMPT_AMNT + ( ORT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

LOOP AT RT WHERE LGART = ITAB_WAGES-LGART.


CURR_MONTHLY_AMNT = CURR_MONTHLY_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
CURR_EXEMPT_AMNT = CURR_EXEMPT_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

ENDLOOP.

LOOP AT ITAB_WAGES WHERE TEVAL = '2'.

LOOP AT ORT WHERE LGART = ITAB_WAGES-LGART.


PREV_MONTHLY_AVG_AMNT = PREV_MONTHLY_AVG_AMNT + ( ORT-BETRG * ITAB_WAGES-
TAXPR / 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
PREV_EXEMPT_AMNT = PREV_EXEMPT_AMNT + ( ORT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

LOOP AT RT WHERE LGART = ITAB_WAGES-LGART.


CURR_MONTHLY_AVG_AMNT = CURR_MONTHLY_AVG_AMNT + ( RT-BETRG * ITAB_WAGES-
TAXPR / 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
CURR_EXEMPT_AMNT = CURR_EXEMPT_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

ENDLOOP.

****** Retro Effect in Bonus

LOOP AT ITAB_WAGES WHERE TEVAL = '3'.

LOOP AT ORT WHERE LGART = ITAB_WAGES-LGART.


PREV_BONUS_AMNT = PREV_BONUS_AMNT + ( ORT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
PREV_EXEMPT_AMNT = PREV_EXEMPT_AMNT + ( ORT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

LOOP AT RT WHERE LGART = ITAB_WAGES-LGART.


CURR_BONUS_AMNT = CURR_BONUS_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
CURR_EXEMPT_AMNT = CURR_EXEMPT_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

ENDLOOP.
LOOP AT ITAB_WAGES WHERE TEVAL = '4'.

LOOP AT ORT WHERE LGART = ITAB_WAGES-LGART.


PREV_BONUS_AVG_AMNT = PREV_BONUS_AVG_AMNT + ( ORT-BETRG * ITAB_WAGES-
TAXPR / 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
PREV_EXEMPT_AMNT = PREV_EXEMPT_AMNT + ( ORT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

LOOP AT RT WHERE LGART = ITAB_WAGES-LGART.


CURR_BONUS_AVG_AMNT = CURR_BONUS_AVG_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR
/ 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
CURR_EXEMPT_AMNT = CURR_EXEMPT_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE /
100 ).
ENDLOOP.

ENDLOOP.

******* Retro Effect in PF

LOOP AT ORT WHERE LGART = TAX_DETAILS-EPFWT.


IF ORT-BETRG LT 0.
ORT-BETRG = ORT-BETRG * -1.
ENDIF.
PREV_PFUND_AMNT = PREV_PFUND_AMNT + ORT-BETRG.
ENDLOOP.
LOOP AT RT WHERE LGART = TAX_DETAILS-EPFWT.
IF RT-BETRG LT 0.
RT-BETRG = RT-BETRG * -1.
ENDIF.
CURR_PFUND_AMNT = CURR_PFUND_AMNT + RT-BETRG.
ENDLOOP.

SALARY_RETRO = SALARY_RETRO + CURR_SALARY_AMNT - PREV_SALARY_AMNT.


MONTHLY_RETRO = MONTHLY_RETRO + CURR_MONTHLY_AMNT - PREV_MONTHLY_AMNT.
MONTHLY_AVG_RETRO = MONTHLY_AVG_RETRO + CURR_MONTHLY_AVG_AMNT -
PREV_MONTHLY_AVG_AMNT.
BONUS_RETRO = BONUS_RETRO + CURR_BONUS_AMNT - PREV_BONUS_AMNT.
BONUS_AVG_RETRO = BONUS_AVG_RETRO + CURR_BONUS_AVG_AMNT -
PREV_BONUS_AVG_AMNT.
PFUND_RETRO = PFUND_RETRO + CURR_PFUND_AMNT - PREV_PFUND_AMNT.
EXEMPT_RETRO = EXEMPT_RETRO + CURR_EXEMPT_AMNT - PREV_EXEMPT_AMNT.

ENDIF.

EXPORT SALARY_RETRO TO MEMORY ID 'SALARY_RETRO'.


EXPORT MONTHLY_RETRO TO MEMORY ID 'MONTHLY_RETRO'.
EXPORT MONTHLY_AVG_RETRO TO MEMORY ID 'MONTHLY_AVG_RETRO'.
EXPORT BONUS_RETRO TO MEMORY ID 'BONUS_RETRO'.
EXPORT BONUS_AVG_RETRO TO MEMORY ID 'BONUS_AVG_RETRO'.
EXPORT PFUND_RETRO TO MEMORY ID 'PFUND_RETRO'.
EXPORT EXEMPT_RETRO TO MEMORY ID 'EXEMPT_RETRO'.

******* Calculating This Month Salary of Employee

IF ITAB-CALCD = SPACE.

****** Calculating Current Salary Amounts from Master Data

CALL FUNCTION 'RP_FILL_WAGE_TYPE_TABLE'


EXPORTING
APPLI = 'E'
BEGDA = ITAB-BEGDA
ENDDA = ITAB-ENDDA
INFTY = '0008'
TCLAS = 'A'
PERNR = PERNR-PERNR
TABLES
PPBWLA = ITAB_PA0008
EXCEPTIONS
ERROR_AT_INDIRECT_EVALUATION = 1
OTHERS = 2.

SELECT * FROM PA0014 INTO CORRESPONDING FIELDS OF TABLE ITAB_PA0014


WHERE PERNR = PERNR-PERNR AND
BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

CALL FUNCTION 'RP_EVALUATE_INDIRECTLY_P0014'


EXPORTING
PBEGDA = ITAB-ENDDA
PMOLGA = '99'
PPERNR = PERNR-PERNR
TABLES
PTBINDBW = ITAB_PA0014
EXCEPTIONS
BAD_PARAMETERS = 1
ERROR_AT_INDIRECT_EVALUATION = 2
OTHERS = 3.

LOOP AT ITAB_PA0008.
MOVE-CORRESPONDING ITAB_PA0008 TO GROSS_SALARY.
APPEND GROSS_SALARY.
ENDLOOP.

LOOP AT ITAB_PA0014.
MOVE-CORRESPONDING ITAB_PA0014 TO GROSS_SALARY.
APPEND GROSS_SALARY.
ENDLOOP.

LOOP AT ITAB_WAGES WHERE TEVAL = SPACE.

LOOP AT GROSS_SALARY WHERE LGART = ITAB_WAGES-LGART.

ANNUAL_MD_AMNT = ANNUAL_MD_AMNT + ( GROSS_SALARY-BETRG * ITAB_WAGES-TAXPR


/ 100 ).

ENDLOOP.
ENDLOOP.

****** Calculating Current Salary Amounts from Payroll

LOOP AT ITAB_WAGES.

LOOP AT RT WHERE LGART = ITAB_WAGES-LGART.

IF ITAB_WAGES-TEVAL = SPACE.
ANNUAL_AMNT = ANNUAL_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR / 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
EXEMPTED_AMNT = EXEMPTED_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE / 100 ).
ELSEIF ITAB_WAGES-TEVAL = '1'.
MONTHLY_AMNT = MONTHLY_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR / 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
EXEMPTED_AMNT = EXEMPTED_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE / 100 ).
ELSEIF ITAB_WAGES-TEVAL = '2'.
MONTHLY_AVG_AMNT = MONTHLY_AVG_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
EXEMPTED_AMNT = EXEMPTED_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE / 100 ).
ELSEIF ITAB_WAGES-TEVAL = '3'.
BONUS_AMNT = BONUS_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR / 100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
EXEMPTED_AMNT = EXEMPTED_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE / 100 ).
ELSEIF ITAB_WAGES-TEVAL = '4'.
BONUS_AVG_AMNT = BONUS_AVG_AMNT + ( RT-BETRG * ITAB_WAGES-TAXPR /
100 ).
EXEMPT_PERCENTAGE = ( 100 - ITAB_WAGES-TAXPR ).
IF EXEMPT_PERCENTAGE LT 0.
EXEMPT_PERCENTAGE = 0.
ENDIF.
EXEMPTED_AMNT = EXEMPTED_AMNT + ( RT-BETRG * EXEMPT_PERCENTAGE / 100 ).
ENDIF.

ENDLOOP.

ENDLOOP.

******* Calculating PF Amounts

LOOP AT RT WHERE LGART = TAX_DETAILS-EPFWT.


IF RT-BETRG LT 0.
RT-BETRG = RT-BETRG * -1.
ENDIF.
PFUND_AMNT = PFUND_AMNT + RT-BETRG.
ENDLOOP.
****** Current Month Income Details

FINAL_PA9325-SALARY = ANNUAL_AMNT.
FINAL_PA9325-MONPAY = MONTHLY_AMNT.
FINAL_PA9325-MONPAY_AVG = MONTHLY_AVG_AMNT.
FINAL_PA9325-BONUS = BONUS_AMNT.
FINAL_PA9325-BONUS_AVG = BONUS_AVG_AMNT.
FINAL_PA9325-EXEMPTED = EXEMPTED_AMNT.
FINAL_PA9325-PFUND = PFUND_AMNT.

FINAL_PA9325-SALARY_RETRO = SALARY_RETRO.
FINAL_PA9325-MONTHLY_RETRO = MONTHLY_RETRO.
FINAL_PA9325-MON_AVG_RETRO = MONTHLY_AVG_RETRO.
FINAL_PA9325-BONUS_RETRO = BONUS_RETRO.
FINAL_PA9325-BONUS_AVG_RETRO = BONUS_AVG_RETRO.
FINAL_PA9325-PFUND_RETRO = PFUND_RETRO.
FINAL_PA9325-EXEMPTED_RETRO = EXEMPT_RETRO.

****** Remaining Tax periods for Projection

IF TAX_DETAILS-CHEK4 = 'X' AND


TAX_DETAILS-PRODT IS NOT INITIAL.

CALL FUNCTION 'HR_ECM_GET_DATETYP_FROM_IT0041'


EXPORTING
PERNR = PERNR-PERNR
KEYDT = ITAB-ENDDA
DATAR = TAX_DETAILS-PRODT
MESSAGE_HANDLER = MESSAGE_HANDLER
IMPORTING
DATE = LEAVING_DATE.

IF SY-SUBRC = 0 AND
LEAVING_DATE GE FIRST_YEAR_DATE AND
LEAVING_DATE LE LAST_YEAR_DATE.

TAX_YEAR = LEAVING_DATE+0(4).
TAX_MONTH = LEAVING_DATE+4(2).
CONCATENATE TAX_YEAR TAX_MONTH '01' INTO FIRST_MONTH_DATE.
IF TAX_MONTH LT 12.
TAX_MONTH = TAX_MONTH + 1.
CONCATENATE TAX_YEAR TAX_MONTH '01' INTO LAST_MONTH_DATE.
LAST_MONTH_DATE = LAST_MONTH_DATE - 1.
ELSE.
TAX_MONTH = '01'.
TAX_YEAR = TAX_YEAR + 1.
CONCATENATE TAX_YEAR TAX_MONTH '01' INTO LAST_MONTH_DATE.
LAST_MONTH_DATE = LAST_MONTH_DATE - 1.
ENDIF.

LAST_TAX_PERIOD = ( LAST_MONTH_DATE - LEAVING_DATE + 1 ) /


( LAST_MONTH_DATE - FIRST_MONTH_DATE + 1 ).
IF LAST_TAX_PERIOD LT 0.
LAST_TAX_PERIOD = 0.
ENDIF.

IF LEAVING_DATE+4(2) GE 7.
REM_TAX_PERIODS = LEAVING_DATE+4(2) - TAX_PERIOD - 6.
REM_TAX_PERIODS = REM_TAX_PERIODS - LAST_TAX_PERIOD.
ELSE.
REM_TAX_PERIODS = LEAVING_DATE+4(2) - TAX_PERIOD + 6.
REM_TAX_PERIODS = REM_TAX_PERIODS - LAST_TAX_PERIOD.
ENDIF.

IF REM_TAX_PERIODS LT 0.
REM_TAX_PERIODS = 0.
ENDIF.

ELSE.
REM_TAX_PERIODS = 12 - TAX_PERIOD.
ENDIF.

ELSE.
REM_TAX_PERIODS = 12 - TAX_PERIOD.
ENDIF.

****** Projected Amounts for the Remaining Periods of Tax Year

IF ITAB-PAYTY = SPACE.
IF TAX_DETAILS-PRORT = 'X'.
FINAL_PA9325-SALARY_ASSUMED = ( ANNUAL_AMNT ) * ( REM_TAX_PERIODS ).
FINAL_PA9325-PFUND_ASSUMED = PFUND_AMNT * ( REM_TAX_PERIODS ).
ELSEIF TAX_DETAILS-PROMD = 'X'.
FINAL_PA9325-SALARY_ASSUMED = ( ANNUAL_MD_AMNT ) * ( REM_TAX_PERIODS ).
FINAL_PA9325-PFUND_ASSUMED = PFUND_AMNT * ( REM_TAX_PERIODS ).
ENDIF.
ELSE.
FINAL_PA9325-SALARY_ASSUMED = ( ANNUAL_MD_AMNT ) * ( REM_TAX_PERIODS + 1 ).
FINAL_PA9325-PFUND_ASSUMED = PFUND_AMNT * ( REM_TAX_PERIODS + 1 ).
ENDIF.

****** Taxable Amount for the Tax Year

ADD: ANNUAL_AMNT TO TAXABLE_AMOUNT.


ADD: FINAL_PA9325-SALARY_ASSUMED TO TAXABLE_AMOUNT.
ADD: MONTHLY_AMNT TO TAXABLE_AMOUNT.
ADD: MONTHLY_AVG_AMNT TO TAXABLE_AMOUNT.
ADD: PA9325-SALARY_YTD TO TAXABLE_AMOUNT.
ADD: SALARY_RETRO TO TAXABLE_AMOUNT.
ADD: MONTHLY_RETRO TO TAXABLE_AMOUNT.
ADD: MONTHLY_AVG_RETRO TO TAXABLE_AMOUNT.

****** Taxable Bonus for the Tax Year

ADD: BONUS_AMNT TO TAXABLE_BONUS.


ADD: BONUS_AVG_AMNT TO TAXABLE_BONUS.
ADD: PA9325-BONUS_YTD TO TAXABLE_BONUS.
ADD: BONUS_RETRO TO TAXABLE_BONUS.
ADD: BONUS_AVG_RETRO TO TAXABLE_BONUS.

****** Provident Fund Amount

ADD: PFUND_AMNT TO PFUND_AMOUNT.


ADD: FINAL_PA9325-PFUND_ASSUMED TO PFUND_AMOUNT.
ADD: PA9325-PFUND_YTD TO PFUND_AMOUNT.
ADD: PFUND_RETRO TO PFUND_AMOUNT.
****** Exempted Amount

ADD: EXEMPTED_AMNT TO EXEMPTED_AMOUNT.


ADD: PA9325-EXEMPTED_YTD TO EXEMPTED_AMOUNT.
ADD: EXEMPT_RETRO TO EXEMPTED_AMOUNT.

****** New YTD Amounts to be Updated in Infotype

FINAL_PA9325-SALARY_YTD = ANNUAL_AMNT + MONTHLY_AMNT + MONTHLY_AVG_AMNT +


PA9325-SALARY_YTD +
SALARY_RETRO + MONTHLY_RETRO + MONTHLY_AVG_RETRO.

FINAL_PA9325-BONUS_YTD = BONUS_AMNT + BONUS_AVG_AMNT + PA9325-BONUS_YTD +


BONUS_RETRO + BONUS_AVG_RETRO.

FINAL_PA9325-PFUND_YTD = PFUND_AMNT + PA9325-PFUND_YTD + PFUND_RETRO.

FINAL_PA9325-EXEMPTED_YTD = EXEMPTED_AMNT + PA9325-EXEMPTED_YTD +


EXEMPT_RETRO.

****** One Time Payments this month *******

IF ITAB-PAYTY = SPACE.

THIS_TIME_MONTHLY = MONTHLY_AMNT + MONTHLY_RETRO.


THIS_TIME_BONUS = BONUS_AMNT + BONUS_RETRO.

ELSE.

THIS_TIME_MONTHLY = ANNUAL_AMNT + MONTHLY_AMNT + MONTHLY_AVG_AMNT +


SALARY_RETRO + MONTHLY_RETRO + MONTHLY_AVG_RETRO.

THIS_TIME_BONUS = BONUS_AMNT + BONUS_AVG_AMNT + BONUS_RETRO +


BONUS_AVG_RETRO.

ENDIF.

* Total Annual Income

FINAL_PA9325-TOT_ANNUAL = TAXABLE_AMOUNT +
TAXABLE_BONUS +
EXEMPTED_AMOUNT.

* Total Taxable Income

FINAL_PA9325-TOT_TAXABLE = TAXABLE_AMOUNT +
TAXABLE_BONUS.

****** Tax on Provident Fund ********

IF PFUND_AMOUNT GE TAX_DETAILS-EPFBT AND


TAX_DETAILS-CHEK2 = 'X'.
PFUND_AMOUNT = PFUND_AMOUNT - TAX_DETAILS-EPFBT.
ELSE.
PFUND_AMOUNT = 0.
ENDIF.

****** Loan Percentage to be Added to Gross Taxable


LOOP AT ITAB_LOANS.

CLEAR: DIFF_PERCENT, LOAN_GRANTED, LOAN_BALANCE,


LOAN_DEDUCTION, LOAN_PAYMENTS,
LOAN_PREV_BALANCE, LOAN_EXEMPT.

DIFF_PERCENT = ITAB_LOANS-GMARKUP - ITAB_LOANS-CMARKUP.

LOOP AT RT WHERE LGART = ITAB_LOANS-BALWT.


LOAN_BALANCE = LOAN_BALANCE + RT-BETRG.
IF RT-BETRG NE 0.
READ TABLE V0 WITH KEY V0TYP = RT-V0TYP V0ZNR = RT-V0ZNR.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM PA0045
WHERE PERNR = PERNR-PERNR AND
SUBTY = ITAB_LOANS-DLART AND
OBJPS = V0-VINFO+4(2).
IF SY-SUBRC = 0.
LOAN_GRANTED = LOAN_GRANTED + PA0045-DARBT.
SELECT SINGLE LEXEMPT FROM ZTAX_LOANS INTO LOAN_EXEMPT
WHERE DLART EQ PA0045-DLART AND
BEGDA LE PA0045-BEGDA AND
ENDDA GE PA0045-BEGDA.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.

LOOP AT RT WHERE LGART = ITAB_LOANS-DEDWT.


LOAN_DEDUCTION = LOAN_DEDUCTION + RT-BETRG.
ENDLOOP.

IF LOAN_BALANCE IS NOT INITIAL.

SELECT * FROM PA0078


WHERE PERNR = PERNR-PERNR AND
BEGDA GE ITAB-BEGDA AND
ENDDA LE ITAB-ENDDA AND
DLART = ITAB_LOANS-DLART AND
ZAHLA = '0250'.
LOAN_PAYMENTS = LOAN_PAYMENTS + PA0078-BETRG.
ENDSELECT.

ENDIF.

LOAN_PREV_BALANCE = LOAN_BALANCE + LOAN_DEDUCTION + LOAN_PAYMENTS.


IF LOAN_GRANTED GT LOAN_EXEMPT. "itab_loans-lexempt.
LOAN_AMOUNT = LOAN_AMOUNT + ( LOAN_PREV_BALANCE * DIFF_PERCENT / 100 ).
ENDIF.

ENDLOOP.

******** Gathering Data from 9315 Infotype

SELECT SINGLE * FROM PA9315


WHERE PERNR EQ PERNR-PERNR
AND BEGDA LE ITAB-ENDDA
AND ENDDA GE ITAB-ENDDA.
***** Furnished Accomodation Cost

IF PA9315-FUR_ACCOM_DATE GT ITAB-ENDDA.

CLEAR PA9315-FUR_ACCOM.

ENDIF.

***** Car Aquisition Cost

IF PA9315-CAR_ACQ_DATE GT ITAB-ENDDA.

CLEAR PA9315-CAR_ACQ_COST.

ENDIF.

***** Car Perquisites

IF PA9315-CAR_PERKS_DATE GT ITAB-ENDDA.

CLEAR PA9315-CAR_PERKS.

ENDIF.

***** Meal Subsidy

IF PA9315-MEAL_SUB_DATE GT ITAB-ENDDA.

CLEAR PA9315-MEAL_SUBSIDY.

ENDIF.

***** Zakat Amount.

IF PA9315-ZAKAT_DATE GT ITAB-ENDDA.

CLEAR PA9315-ZAKAT.

ENDIF.

***** Donations Amount.

IF PA9315-DONATIONS_DATE GT ITAB-ENDDA.

CLEAR PA9315-DONATIONS.

ELSE.

DONATIONS_AMOUNT = FINAL_PA9325-TOT_TAXABLE * TAX_DETAILS-DONPR / 100.

IF TAX_DETAILS-DONFV LE PA9315-DONATIONS AND


TAX_DETAILS-DONFV LE DONATIONS_AMOUNT.

PA9315-DONATIONS = TAX_DETAILS-DONFV.

ELSEIF DONATIONS_AMOUNT LE PA9315-DONATIONS AND


DONATIONS_AMOUNT LE TAX_DETAILS-DONFV.
PA9315-DONATIONS = DONATIONS_AMOUNT.

ENDIF.

ENDIF.

***** Profit On Debt.

IF PA9315-MARK_UP_DATE GT ITAB-ENDDA.

CLEAR PA9315-MARK_UP.

ELSE.

MARK_UP_AMOUNT = FINAL_PA9325-TOT_TAXABLE * TAX_DETAILS-PODPR / 100.

IF TAX_DETAILS-PODFV LE PA9315-MARK_UP AND


TAX_DETAILS-PODFV LE MARK_UP_AMOUNT.

PA9315-MARK_UP = TAX_DETAILS-PODFV.

ELSEIF MARK_UP_AMOUNT LE PA9315-MARK_UP AND


MARK_UP_AMOUNT LE TAX_DETAILS-PODFV.

PA9315-MARK_UP = MARK_UP_AMOUNT.

ENDIF.

ENDIF.

***** Bonus Amount

IF PA9315-BONUS GT ITAB-ENDDA.

CLEAR PA9315-BONUS.

ENDIF.

***** Other Amount

IF PA9315-ADD_GROSS_DATE GT ITAB-ENDDA.

CLEAR PA9315-ADD_GROSS.

ENDIF.

***** Increase Percentage

IF PA9315-INC_GROSS_DATE GT ITAB-ENDDA.

CLEAR PA9315-INC_GROSS.

ELSE.

INC_GROSS_AMOUNT = FINAL_PA9325-TOT_TAXABLE * PA9315-INC_GROSS / 100.

ENDIF.

***** Decrease Percentage


IF PA9315-DEC_GROSS_DATE GT ITAB-ENDDA.

CLEAR PA9315-DEC_GROSS.

ELSE.

DEC_GROSS_AMOUNT = FINAL_PA9325-TOT_TAXABLE * PA9315-DEC_GROSS / 100.

ENDIF.

******** Calculating Net Taxable Income

FINAL_PA9325-NET_TAXABLE = FINAL_PA9325-TOT_TAXABLE +
PA9315-FUR_ACCOM +
PA9315-CAR_ACQ_COST +
PA9315-CAR_PERKS +
PA9315-MEAL_SUBSIDY -
PA9315-ZAKAT -
PA9315-DONATIONS -
PA9315-MARK_UP +
PA9315-BONUS +
PA9315-ADD_GROSS +
LOAN_AMOUNT +
PFUND_AMOUNT +
INC_GROSS_AMOUNT -
DEC_GROSS_AMOUNT.

TAXABLE_BONUS = TAXABLE_BONUS + PA9315-BONUS.

FINAL_PA9325-FUR_ACCOM_AMNT = PA9315-FUR_ACCOM.
FINAL_PA9325-CAR_ACQ_AMNT = PA9315-CAR_ACQ_COST.
FINAL_PA9325-CAR_PERKS_AMNT = PA9315-CAR_PERKS.
FINAL_PA9325-MEAL_SUB_AMNT = PA9315-MEAL_SUBSIDY.
FINAL_PA9325-ZAKAT_AMNT = PA9315-ZAKAT * -1.
FINAL_PA9325-DONATIONS_AMNT = PA9315-DONATIONS * -1.
FINAL_PA9325-MARK_UP_AMNT = PA9315-MARK_UP * -1.
FINAL_PA9325-BONUS_AMNT = PA9315-BONUS.
FINAL_PA9325-LOAN_AMNT = LOAN_AMOUNT.
FINAL_PA9325-PFUND_AMNT = PFUND_AMOUNT.
FINAL_PA9325-ADD_GROSS_TEXT = PA9315-ADD_GROSS_TEXT.
FINAL_PA9325-ADD_GROSS_AMNT = PA9315-ADD_GROSS.
FINAL_PA9325-INC_GROSS_TEXT = PA9315-INC_GROSS_TEXT.
FINAL_PA9325-INC_GROSS_PCNT = PA9315-INC_GROSS.
FINAL_PA9325-INC_GROSS_AMNT = INC_GROSS_AMOUNT.
FINAL_PA9325-DEC_GROSS_TEXT = PA9315-DEC_GROSS_TEXT.
FINAL_PA9325-DEC_GROSS_PCNT = PA9315-DEC_GROSS.
FINAL_PA9325-DEC_GROSS_AMNT = DEC_GROSS_AMOUNT * -1.

IF FINAL_PA9325-NET_TAXABLE LT 0.
FINAL_PA9325-NET_TAXABLE = 0.
ENDIF.

***********************************************************************************
***

***** Function to Calculate Income tax.


IF FINAL_PA9325-NET_TAXABLE GT 0.

IF TAXABLE_BONUS LT 0.
TAXABLE_BONUS = 0.
ENDIF.

IF THIS_TIME_MONTHLY LT 0.
THIS_TIME_MONTHLY = 0.
ENDIF.

IF THIS_TIME_BONUS LT 0.
THIS_TIME_BONUS = 0.
ENDIF.

CALL FUNCTION 'ZFAK_INCOMETAX_CALC'


EXPORTING
PERNR = PERNR-PERNR
ANRED = PA0002-ANRED
START_DATE = ITAB-BEGDA
END_DATE = ITAB-ENDDA
FIRST_YEAR_DATE = FIRST_YEAR_DATE
NET_TAXABLE = FINAL_PA9325-NET_TAXABLE
TAX_DETAILS = TAX_DETAILS
IMPORTING
TAX_SLAB = FINAL_PA9325-TAX_SLAB
TAX_SLAB_RATE = FINAL_PA9325-TAX_SLAB_RATE
TAX_SLAB_MP = FINAL_PA9325-TAX_SLAB_MP
TAX_SLAB_MP_RATE = FINAL_PA9325-TAX_SLAB_MP_RATE
TAX_MR = FINAL_PA9325-TAX_MR
TAX_MR_RATE = FINAL_PA9325-TAX_MR_RATE
TAX_MR_MP = FINAL_PA9325-TAX_MR_MP
TAX_MR_MP_RATE = FINAL_PA9325-TAX_MR_MP_RATE
TAX_BONUS = FINAL_PA9325-TAX_BONUS
TAX_BONUS_RATE = FINAL_PA9325-TAX_BONUS_RATE
CHANGING
BONUS_AMT = TAXABLE_BONUS
MONTHLY_THIS_MONTH = THIS_TIME_MONTHLY
BONUS_THIS_MONTH = THIS_TIME_BONUS.

ELSE.

FINAL_PA9325-TAX_SLAB = 0.
FINAL_PA9325-TAX_SLAB_RATE = 0.
FINAL_PA9325-TAX_SLAB_MP = 0.
FINAL_PA9325-TAX_SLAB_MP_RATE = 0.
FINAL_PA9325-TAX_MR = 0.
FINAL_PA9325-TAX_MR_RATE = 0.
FINAL_PA9325-TAX_MR_MP = 0.
FINAL_PA9325-TAX_MR_MP_RATE = 0.
FINAL_PA9325-TAX_BONUS = 0.
FINAL_PA9325-TAX_BONUS_RATE = 0.

ENDIF.

****** Selecting Tax on the Basis of Lower Amount

IF FINAL_PA9325-TAX_SLAB LT FINAL_PA9325-TAX_MR.
ANNUAL_TAX = FINAL_PA9325-TAX_SLAB.
ELSE.
ANNUAL_TAX = FINAL_PA9325-TAX_MR.
ENDIF.

IF FINAL_PA9325-TAX_SLAB_MP LT FINAL_PA9325-TAX_MR_MP.
MONTHLY_TAX = FINAL_PA9325-TAX_SLAB_MP.
ELSE.
MONTHLY_TAX = FINAL_PA9325-TAX_MR_MP.
ENDIF.

IF TAXABLE_BONUS GT 0.
BONUS_TAX = FINAL_PA9325-TAX_BONUS.
BONUS_TAX_MONTH = THIS_TIME_BONUS / TAXABLE_BONUS * FINAL_PA9325-TAX_BONUS.
ELSE.
BONUS_TAX = 0.
BONUS_TAX_MONTH = 0.
ENDIF.

********* Total Annual Tax

FINAL_PA9325-TAX_ANNUAL = ANNUAL_TAX + MONTHLY_TAX + BONUS_TAX.


TAX_LIABILITY = FINAL_PA9325-TAX_ANNUAL.

*****ADJUSTMENT FROM INFOTYPE TABLE 9315 FOR LAIBALITY*****

********** IF Age Greater than 60 Tax Liability is half

IF PA0002-GBDAT IS NOT INITIAL AND


TAX_DETAILS-CHEK1 EQ 'X'.

CALL FUNCTION 'HR_HK_DIFF_BT_2_DATES'


EXPORTING
DATE1 = FIRST_YEAR_DATE
DATE2 = PA0002-GBDAT
OUTPUT_FORMAT = '03'
IMPORTING
YEARS = AGE_IN_YEARS
DAYS = AGE_IN_DAYS
EXCEPTIONS
INVALID_DATES_SPECIFIED = 1
OTHERS = 2.

IF AGE_IN_YEARS GE TAX_DETAILS-AGERL AND


TAX_LIABILITY GT 0 AND
FINAL_PA9325-NET_TAXABLE LE TAX_DETAILS-AGELT.

AGE_RELIEF_AMOUNT = TAX_LIABILITY * TAX_DETAILS-AGEPR / 100.


MONTHLY_TAX = MONTHLY_TAX * TAX_DETAILS-AGEPR / 100.
BONUS_TAX_MONTH = BONUS_TAX_MONTH * TAX_DETAILS-AGEPR / 100.

ELSE.

AGE_RELIEF_AMOUNT = 0.

ENDIF.

ELSE.

AGE_RELIEF_AMOUNT = 0.
ENDIF.

***** Investment in Shares

IF PA9315-INV_SHARE_DATE GT ITAB-ENDDA OR
FINAL_PA9325-NET_TAXABLE LE 0.

CLEAR INV_IN_SHARES.

ELSE.

INV_SHARES_AMOUNT = FINAL_PA9325-NET_TAXABLE * TAX_DETAILS-IISPR / 100.

IF TAX_DETAILS-IISFV LE PA9315-INV_SHARE AND


TAX_DETAILS-IISFV LE INV_SHARES_AMOUNT.

INV_IN_SHARES = TAX_DETAILS-IISFV.

ELSEIF INV_SHARES_AMOUNT LE PA9315-INV_SHARE AND


INV_SHARES_AMOUNT LE TAX_DETAILS-IISFV.

INV_IN_SHARES = INV_SHARES_AMOUNT.

ELSE.

INV_IN_SHARES = PA9315-INV_SHARE.

ENDIF.

INV_IN_SHARES = TAX_LIABILITY / FINAL_PA9325-NET_TAXABLE * INV_IN_SHARES.

ENDIF.

***** Health Insurance Premium

IF PA9315-HIPREMIUM_DATE GT ITAB-ENDDA OR
FINAL_PA9325-NET_TAXABLE LE 0.

CLEAR HEALTH_INS_PREM.

ELSE.

HIPREMIUMS_AMOUNT = FINAL_PA9325-NET_TAXABLE * TAX_DETAILS-HIPPR / 100.

IF TAX_DETAILS-HIPFV LE PA9315-HIPREMIUM AND


TAX_DETAILS-HIPFV LE HIPREMIUMS_AMOUNT.

HEALTH_INS_PREM = TAX_DETAILS-HIPFV.

ELSEIF HIPREMIUMS_AMOUNT LE PA9315-HIPREMIUM AND


HIPREMIUMS_AMOUNT LE TAX_DETAILS-HIPFV.

HEALTH_INS_PREM = HIPREMIUMS_AMOUNT.

ELSE.

HEALTH_INS_PREM = PA9315-HIPREMIUM.

ENDIF.
HEALTH_INS_PREM = TAX_LIABILITY / FINAL_PA9325-NET_TAXABLE *
HEALTH_INS_PREM.

ENDIF.

***** Donation to Charity.

IF PA9315-DON_CHA_DATE GT ITAB-ENDDA OR
FINAL_PA9325-NET_TAXABLE LE 0.

CLEAR DONATION_CHARITY.

ELSE.

DON_CHA_AMOUNT = FINAL_PA9325-NET_TAXABLE * TAX_DETAILS-DTCPR / 100.

IF TAX_DETAILS-DTCFV LE PA9315-DON_CHA AND


TAX_DETAILS-DTCFV LE DON_CHA_AMOUNT.

DONATION_CHARITY = TAX_DETAILS-DTCFV.

ELSEIF DON_CHA_AMOUNT LE PA9315-DON_CHA AND


DON_CHA_AMOUNT LE TAX_DETAILS-DTCFV.

DONATION_CHARITY = DON_CHA_AMOUNT.

ELSE.

DONATION_CHARITY = PA9315-DON_CHA.

ENDIF.

DONATION_CHARITY = TAX_LIABILITY / FINAL_PA9325-NET_TAXABLE *


DONATION_CHARITY.

ENDIF.

***** Pension Fund Contribution.

IF PA9315-PFUND_CTR_DATE GT ITAB-ENDDA OR
FINAL_PA9325-NET_TAXABLE LE 0.

CLEAR PFUND_CONTRIBUTION.

ELSE.

CLEAR: AGE_IN_YEARS, AGE_IN_DAYS.

CALL FUNCTION 'HR_HK_DIFF_BT_2_DATES'


EXPORTING
DATE1 = FIRST_YEAR_DATE
DATE2 = PA0002-GBDAT
OUTPUT_FORMAT = '03'
IMPORTING
YEARS = AGE_IN_YEARS
DAYS = AGE_IN_DAYS
EXCEPTIONS
INVALID_DATES_SPECIFIED = 1
OTHERS = 2.

IF AGE_IN_YEARS GT 40.
TAX_DETAILS-PFCPR = ( ( AGE_IN_YEARS - 40 ) * 2 ) + TAX_DETAILS-PFCPR.
ENDIF.

PREV_OLD_END_DATE = FIRST_YEAR_DATE - 1.

SELECT SINGLE NET_TAXABLE FROM PA9325 INTO PREV_PFUND_LIMIT


WHERE PERNR EQ PERNR-PERNR AND
BEGDA LE PREV_OLD_END_DATE AND
ENDDA GE PREV_OLD_END_DATE.

PREV_PFUND_LIMIT = PREV_PFUND_LIMIT * 30 / 100.

IF PREV_PFUND_LIMIT = 0.
PREV_PFUND_LIMIT = TAX_DETAILS-PFCFV.
ENDIF.

PENSION_CTR_AMOUNT = FINAL_PA9325-NET_TAXABLE * TAX_DETAILS-PFCPR / 100.

IF PENSION_CTR_AMOUNT GT PREV_PFUND_LIMIT.
PENSION_CTR_AMOUNT = PREV_PFUND_LIMIT.
ENDIF.

IF TAX_DETAILS-PFCFV LE PA9315-PFUND_CTR AND


TAX_DETAILS-PFCFV LE PENSION_CTR_AMOUNT.

PFUND_CONTRIBUTION = TAX_DETAILS-PFCFV.

ELSEIF PENSION_CTR_AMOUNT LE PA9315-PFUND_CTR AND


PENSION_CTR_AMOUNT LE TAX_DETAILS-PFCFV.

PFUND_CONTRIBUTION = PENSION_CTR_AMOUNT.

ELSE.

PFUND_CONTRIBUTION = PA9315-PFUND_CTR.

ENDIF.

PFUND_CONTRIBUTION = TAX_LIABILITY / FINAL_PA9325-NET_TAXABLE *


PFUND_CONTRIBUTION.

ENDIF.

***** Previous Year Tax Arrears

IF PA9315-ARREARS_DATE GT ITAB-ENDDA.

CLEAR PA9315-ARREARS.

ENDIF.

***** Other Relief

IF PA9315-ADD_LIAB_DATE GT ITAB-ENDDA.

CLEAR PA9315-ADD_LIAB.
ENDIF.

***** Increase Liability Percentage

IF PA9315-INC_LIAB_DATE GT ITAB-ENDDA.

CLEAR INC_LIAB_AMOUNT.

ELSE.

INC_LIAB_AMOUNT = TAX_LIABILITY * PA9315-INC_LIAB / 100.

ENDIF.

***** Decrease Liability Percentage

IF PA9315-DEC_LIAB_DATE GT ITAB-ENDDA.

CLEAR DEC_LIAB_AMOUNT.

ELSE.

DEC_LIAB_AMOUNT = TAX_LIABILITY * PA9315-DEC_LIAB / 100.

ENDIF.

************* Calculating Annual Net Tax for the Year ***************

FINAL_PA9325-NET_TAX_ANNUAL = TAX_LIABILITY -
AGE_RELIEF_AMOUNT -
INV_IN_SHARES -
HEALTH_INS_PREM -
DONATION_CHARITY -
PFUND_CONTRIBUTION +
PA9315-ARREARS +
PA9315-ADD_LIAB +
INC_LIAB_AMOUNT -
DEC_LIAB_AMOUNT.

FINAL_PA9325-AGE_RELIEF_AMNT = AGE_RELIEF_AMOUNT * -1.


FINAL_PA9325-INV_SHARE_AMNT = INV_IN_SHARES * -1.
FINAL_PA9325-HIPREMIUM_AMNT = HEALTH_INS_PREM * -1.
FINAL_PA9325-DON_CHA_AMNT = DONATION_CHARITY * -1.
FINAL_PA9325-PFUND_CTR_AMNT = PFUND_CONTRIBUTION * -1.
FINAL_PA9325-ARREARS_AMNT = PA9315-ARREARS.
FINAL_PA9325-ADD_LIAB_TEXT = PA9315-ADD_LIAB_TEXT.
FINAL_PA9325-ADD_LIAB_AMNT = PA9315-ADD_LIAB.
FINAL_PA9325-INC_LIAB_TEXT = PA9315-INC_LIAB_TEXT.
FINAL_PA9325-INC_LIAB_PCNT = PA9315-INC_LIAB.
FINAL_PA9325-INC_LIAB_AMNT = INC_LIAB_AMOUNT.
FINAL_PA9325-DEC_LIAB_TEXT = PA9315-DEC_LIAB_TEXT.
FINAL_PA9325-DEC_LIAB_PCNT = PA9315-DEC_LIAB.
FINAL_PA9325-DEC_LIAB_AMNT = DEC_LIAB_AMOUNT * -1.

IF FINAL_PA9325-NET_TAX_ANNUAL LT 0.
FINAL_PA9325-NET_TAX_ANNUAL = 0.
ENDIF.
************* Calculating Tax Liability for the Remaining Periods ***************

FINAL_PA9325-TAX_LIABILITY = FINAL_PA9325-NET_TAX_ANNUAL - PA9325-TAX_YTD.

IF FINAL_PA9325-TAX_LIABILITY LT 0.
FINAL_PA9325-TAX_LIABILITY = 0.
ENDIF.

********* Checking Tax Overriding ***************

IF ITAB-PAYTY = SPACE.

SELECT SINGLE * FROM PA0014 WHERE


PERNR = PERNR-PERNR AND
LGART = TAX_DETAILS-TAXWT AND
BEGDA LE ITAB-ENDDA AND
ENDDA GE ITAB-ENDDA.

IF SY-SUBRC = 0.

TAX_OVERRIDE_CHECK = 'X'.
TAX_OVERRIDE_AMOUNT = PA0014-BETRG.
IF PA0014-OPKEN = SPACE.
TAX_OVERRIDE_AMOUNT = TAX_OVERRIDE_AMOUNT * -1.
ENDIF.

ELSE.

SELECT SINGLE * FROM PA0015 WHERE


PERNR = PERNR-PERNR AND
LGART = TAX_DETAILS-TAXWT AND
BEGDA GE ITAB-BEGDA AND
BEGDA LE ITAB-ENDDA.

IF SY-SUBRC = 0.

TAX_OVERRIDE_CHECK = 'X'.
TAX_OVERRIDE_AMOUNT = PA0015-BETRG.
IF PA0015-OPKEN = SPACE.
TAX_OVERRIDE_AMOUNT = TAX_OVERRIDE_AMOUNT * -1.
ENDIF.

ENDIF.
ENDIF.

ELSE.

SELECT SINGLE * FROM PA0267 WHERE


PERNR = PERNR-PERNR AND
LGART = TAX_DETAILS-TAXWT AND
BEGDA GE ITAB-BEGDA AND
BEGDA LE ITAB-ENDDA.

IF SY-SUBRC = 0.

TAX_OVERRIDE_CHECK = 'X'.
TAX_OVERRIDE_AMOUNT = PA0267-BETRG.
IF PA0267-OPKEN = SPACE.
TAX_OVERRIDE_AMOUNT = TAX_OVERRIDE_AMOUNT * -1.
ENDIF.

ENDIF.

ENDIF.

************* Calculating Tax for Current Month ***************

IF TAX_OVERRIDE_CHECK = 'X'.

FINAL_PA9325-TAX_OVERRIDE = 'X'.
FINAL_PA9325-TAX_MONTH = TAX_OVERRIDE_AMOUNT.

ELSE.

CLEAR: FINAL_PA9325-TAX_OVERRIDE.

IF ITAB-PAYTY = SPACE.

TAX_LIABILITY = FINAL_PA9325-TAX_LIABILITY - MONTHLY_TAX -


BONUS_TAX_MONTH.
IF TAX_LIABILITY LE 0.
FINAL_PA9325-TAX_MONTH = FINAL_PA9325-TAX_LIABILITY.
ELSE.
FINAL_PA9325-TAX_MONTH = ( TAX_LIABILITY / ( REM_TAX_PERIODS + 1 ) ) +
MONTHLY_TAX + BONUS_TAX_MONTH.
ENDIF.

ELSE.

TAX_LIABILITY = FINAL_PA9325-TAX_LIABILITY - MONTHLY_TAX -


BONUS_TAX_MONTH.
IF TAX_LIABILITY LE 0.
FINAL_PA9325-TAX_MONTH = FINAL_PA9325-TAX_LIABILITY.
ELSE.
FINAL_PA9325-TAX_MONTH = MONTHLY_TAX + BONUS_TAX_MONTH.
ENDIF.

ENDIF.

ENDIF.

********** Rounding Tax Amount **************

TAX_ROUNDING = FINAL_PA9325-TAX_MONTH.
FINAL_PA9325-TAX_MONTH = TAX_ROUNDING.

********** Calculating New Tax YTD Amount ************

FINAL_PA9325-TAX_YTD = PA9325-TAX_YTD + FINAL_PA9325-TAX_MONTH.

**********************************************************
***************** Updating Tax Infotype ******************
**********************************************************

IF TST_ON NE 'X'.
FINAL_PA9325-MANDT = SY-MANDT.
FINAL_PA9325-UNAME = SY-UNAME.
FINAL_PA9325-AEDTM = SY-DATUM.

MODIFY PA9325 FROM FINAL_PA9325.

ENDIF.

******************************************************
***************** Updating RT Table ******************
******************************************************

IF FINAL_PA9325-TAX_MONTH GT 0 AND
TAX_OVERRIDE_CHECK NE 'X'.

SORT RT BY ABART LGART.

LOOP AT RT.
ENDLOOP.

***** Update Incoem Tax Wagetpye.

RT-LGART = TAX_DETAILS-TAXWT.
RT-BETRG = FINAL_PA9325-TAX_MONTH * -1.
CLEAR RT-ANZHL.
APPEND RT.

****** Update Payroll Generated Wagetypes

LOOP AT RT
WHERE LGART = '/557'.
RT-BETRG = RT-BETRG + ( FINAL_PA9325-TAX_MONTH * -1 ).
IF RT-BETRG LT 0.
RT-BETRG = 0.
ENDIF.
MODIFY RT.
ENDLOOP.

LOOP AT RT
WHERE LGART = '/559'.
RT-BETRG = RT-BETRG + ( FINAL_PA9325-TAX_MONTH * -1 ).
IF RT-BETRG LT 0.
RT-BETRG = 0.
ENDIF.
MODIFY RT.
ENDLOOP.

LOOP AT RT
WHERE LGART = '/560'.
RT-BETRG = RT-BETRG + ( FINAL_PA9325-TAX_MONTH * -1 ).
IF RT-BETRG LT 0.
NEGATIVE_SALARY_CHECK = 'X'.
NEGATIVE_SALARY_AMOUNT = RT-BETRG * -1.
RT-BETRG = 0.
ENDIF.
MODIFY RT.
ENDLOOP.
LOOP AT RT
WHERE LGART = '/561'.
RT-BETRG = RT-BETRG + FINAL_PA9325-TAX_MONTH.
MODIFY RT.
ENDLOOP.

LOOP AT RT
WHERE LGART = '/110'.
RT-BETRG = RT-BETRG + ( FINAL_PA9325-TAX_MONTH * -1 ).
MODIFY RT.
ENDLOOP.
IF SY-SUBRC NE 0 AND
FINAL_PA9325-TAX_MONTH NE 0.
RT-LGART = '/110'.
RT-BETRG = FINAL_PA9325-TAX_MONTH * -1.
CLEAR RT-ANZHL.
APPEND RT.
ENDIF.

IF NEGATIVE_SALARY_CHECK = 'X'.
DELETE RT WHERE LGART = '/560'.
DELETE RT WHERE LGART = '/557'.
DELETE RT WHERE LGART = '/559'.
RT-LGART = '/561'.
RT-BETRG = NEGATIVE_SALARY_AMOUNT.
CLEAR RT-ANZHL.
APPEND RT.
ENDIF.

SORT RT BY ABART LGART.

ENDIF.

ENDIF.

******* Writing Income Tax Information on Screen *********

IF TST_ON = 'X' AND ITAB-CALCD = SPACE AND PRT_PROT = 'X'.

ULINE.

WRITE:/(10) PERNR-PERNR,
(40) PERNR-ENAME,
(12) ITAB-BEGDA,
(12) ITAB-ENDDA.

ULINE.

WRITE:/(90) 'INCOME TAX SUMMARY' CENTERED.


ULINE:/36(20).

WRITE:/(70) 'Income Tax Period' LEFT-JUSTIFIED, (20)


FINAL_PA9325-T_PERIOD RIGHT-JUSTIFIED.
WRITE:/(70) 'Payroll Period' LEFT-JUSTIFIED, (20)
FINAL_PA9325-P_PERIOD RIGHT-JUSTIFIED.

WRITE:/(70) '-'.
WRITE:/(70) 'Previous Salary YTD' LEFT-JUSTIFIED, (21)
FINAL_PA9325-P_SALARY_YTD RIGHT-JUSTIFIED.
WRITE:/(70) 'Previous Bonus YTD' LEFT-JUSTIFIED, (21)
FINAL_PA9325-P_BONUS_YTD RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Taxable Salary Retro' LEFT-JUSTIFIED,


(21) FINAL_PA9325-SALARY_RETRO RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Monthly Payments Retro' LEFT-JUSTIFIED,
(21) FINAL_PA9325-MONTHLY_RETRO RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Monthly Payments (Average Out) Retro' LEFT-JUSTIFIED,
(21) FINAL_PA9325-MON_AVG_RETRO RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Bonus Retro' LEFT-JUSTIFIED,
(21) FINAL_PA9325-BONUS_RETRO RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Bonus (Average Out) Retro' LEFT-JUSTIFIED,
(21) FINAL_PA9325-BONUS_AVG_RETRO RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Taxable Salary this Month' LEFT-JUSTIFIED,


(21) FINAL_PA9325-SALARY RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Salary for Ramaining Periods' LEFT-JUSTIFIED,
(21) FINAL_PA9325-SALARY_ASSUMED RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Monthly Payments this Month' LEFT-JUSTIFIED,
(21) FINAL_PA9325-MONPAY RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Monthly Payments (Average Out) this Month' LEFT-
JUSTIFIED, (21) FINAL_PA9325-MONPAY_AVG RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Bonus this Month' LEFT-JUSTIFIED,
(21) FINAL_PA9325-BONUS RIGHT-JUSTIFIED.
WRITE:/(70) 'Taxable Bonus (Average Out) this Month' LEFT-JUSTIFIED,
(21) FINAL_PA9325-BONUS_AVG RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Previous Provident Fund YTD' LEFT-JUSTIFIED, (21)


FINAL_PA9325-P_PFUND_YTD RIGHT-JUSTIFIED.
WRITE:/(70) 'Provident Fund Retro' LEFT-JUSTIFIED, (21)
FINAL_PA9325-PFUND_RETRO RIGHT-JUSTIFIED.
WRITE:/(70) 'Provident Fund this Month' LEFT-JUSTIFIED, (21)
FINAL_PA9325-PFUND RIGHT-JUSTIFIED.
WRITE:/(70) 'Provident Fund for Ramaining Periods' LEFT-JUSTIFIED, (21)
FINAL_PA9325-PFUND_ASSUMED RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Previous Exemptions YTD' LEFT-JUSTIFIED, (21)


FINAL_PA9325-P_EXEMPTED_YTD RIGHT-JUSTIFIED.
WRITE:/(70) 'Exemptions Retro' LEFT-JUSTIFIED, (21)
FINAL_PA9325-EXEMPTED_RETRO RIGHT-JUSTIFIED.
WRITE:/(70) 'Exemptions this Month' LEFT-JUSTIFIED, (21)
FINAL_PA9325-EXEMPTED RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Total Annual Income' LEFT-JUSTIFIED, (21)


FINAL_PA9325-TOT_ANNUAL RIGHT-JUSTIFIED.
WRITE:/(70) 'Total Taxable Income' LEFT-JUSTIFIED, (21)
FINAL_PA9325-TOT_TAXABLE RIGHT-JUSTIFIED.
WRITE:/(70) '-'.

WRITE:/(70) 'Company Accomodation' LEFT-JUSTIFIED, (21)


FINAL_PA9325-FUR_ACCOM_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Car Acquisition Cost' LEFT-JUSTIFIED, (21)
FINAL_PA9325-CAR_ACQ_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Car Perquisites Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-CAR_PERKS_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Meal Subsidy Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-MEAL_SUB_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Zakat Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-ZAKAT_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Donation Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-DONATIONS_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Profit on Debt(House Loan)' LEFT-JUSTIFIED, (21)
FINAL_PA9325-MARK_UP_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Assumed Bonus Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-BONUS_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Provident Fund Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-PFUND_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Loan Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-LOAN_AMNT RIGHT-JUSTIFIED.

IF FINAL_PA9325-ADD_GROSS_TEXT IS INITIAL.
WRITE:/(70) 'Add to Gross Amount' LEFT-JUSTIFIED, (21)
FINAL_PA9325-ADD_GROSS_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(70) FINAL_PA9325-ADD_GROSS_TEXT LEFT-JUSTIFIED, (21)
FINAL_PA9325-ADD_GROSS_AMNT RIGHT-JUSTIFIED.
ENDIF.

IF FINAL_PA9325-INC_GROSS_TEXT IS INITIAL.
WRITE:/(50) 'Increase Gross %' LEFT-JUSTIFIED,
(20) FINAL_PA9325-INC_GROSS_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-INC_GROSS_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(50) FINAL_PA9325-INC_GROSS_TEXT LEFT-JUSTIFIED,
(20) FINAL_PA9325-INC_GROSS_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-INC_GROSS_AMNT RIGHT-JUSTIFIED.
ENDIF.

IF FINAL_PA9325-DEC_GROSS_TEXT IS INITIAL.
WRITE:/(50) 'Decrease Gross %' LEFT-JUSTIFIED,
(20) FINAL_PA9325-DEC_GROSS_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-DEC_GROSS_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(50) FINAL_PA9325-DEC_GROSS_TEXT LEFT-JUSTIFIED,
(20) FINAL_PA9325-DEC_GROSS_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-DEC_GROSS_AMNT RIGHT-JUSTIFIED.
ENDIF.

WRITE:/(70) '-'.

WRITE:/(70) 'Net Taxable Income' LEFT-JUSTIFIED, (21)


FINAL_PA9325-NET_TAXABLE RIGHT-JUSTIFIED.

WRITE:/(70) '-'.
WRITE:/(50) 'Annual Tax (Slab Rate)' LEFT-JUSTIFIED,
(20) FINAL_PA9325-TAX_SLAB_RATE RIGHT-JUSTIFIED, (20)
FINAL_PA9325-TAX_SLAB RIGHT-JUSTIFIED.
* WRITE:/(50) 'Annual Tax (Marginal Relief)' LEFT-JUSTIFIED,
* (20) final_pa9325-tax_mr_rate RIGHT-JUSTIFIED,
(20) final_pa9325-tax_mr RIGHT-JUSTIFIED.
WRITE:/(50) 'Tax on Monthly Payments (Slab Rate)' LEFT-JUSTIFIED,
(20) FINAL_PA9325-TAX_SLAB_MP_RATE RIGHT-JUSTIFIED, (20)
FINAL_PA9325-TAX_SLAB_MP RIGHT-JUSTIFIED.
* WRITE:/(50) 'Tax on Monthly Payments (Marginal Relief)' LEFT-JUSTIFIED,
* (20) final_pa9325-tax_mr_mp_rate RIGHT-JUSTIFIED,
(20) final_pa9325-tax_mr_mp RIGHT-JUSTIFIED.
WRITE:/(50) 'Tax On Bonus' LEFT-JUSTIFIED,
(20) FINAL_PA9325-TAX_BONUS_RATE RIGHT-JUSTIFIED, (20)
FINAL_PA9325-TAX_BONUS RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Total Annual Tax' LEFT-JUSTIFIED, (21)


FINAL_PA9325-TAX_ANNUAL RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

IF FINAL_PA9325-AGE_RELIEF_AMNT GT 0.
WRITE:/(50) 'Age Relief' LEFT-JUSTIFIED,
(20) 'GRANTED' LEFT-JUSTIFIED, (20)
FINAL_PA9325-AGE_RELIEF_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(50) 'Age Relief' LEFT-JUSTIFIED,
(20) 'NOT GRANTED' LEFT-JUSTIFIED, (20)
FINAL_PA9325-AGE_RELIEF_AMNT RIGHT-JUSTIFIED.
ENDIF.

WRITE:/(70) 'Investment in Shares' LEFT-JUSTIFIED, (21)


FINAL_PA9325-INV_SHARE_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Health Insurance Premium' LEFT-JUSTIFIED, (21)
FINAL_PA9325-HIPREMIUM_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Donation to Charity' LEFT-JUSTIFIED, (21)
FINAL_PA9325-DON_CHA_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Pension Fund Contribution' LEFT-JUSTIFIED, (21)
FINAL_PA9325-PFUND_CTR_AMNT RIGHT-JUSTIFIED.
WRITE:/(70) 'Last Year Arrears' LEFT-JUSTIFIED, (21)
FINAL_PA9325-ARREARS_AMNT RIGHT-JUSTIFIED.

IF FINAL_PA9325-ADD_LIAB_TEXT IS INITIAL.
WRITE:/(70) 'Add to Liability' LEFT-JUSTIFIED, (21)
FINAL_PA9325-ADD_LIAB_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(70) FINAL_PA9325-ADD_LIAB_TEXT LEFT-JUSTIFIED, (21)
FINAL_PA9325-ADD_LIAB_AMNT RIGHT-JUSTIFIED.
ENDIF.

IF FINAL_PA9325-INC_LIAB_TEXT IS INITIAL.
WRITE:/(50) 'Increase Liability %' LEFT-JUSTIFIED,
(20) FINAL_PA9325-INC_LIAB_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-INC_LIAB_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(50) FINAL_PA9325-INC_LIAB_TEXT LEFT-JUSTIFIED,
(20) FINAL_PA9325-INC_LIAB_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-INC_LIAB_AMNT RIGHT-JUSTIFIED.
ENDIF.

IF FINAL_PA9325-DEC_LIAB_TEXT IS INITIAL.
WRITE:/(50) 'Decrease Liability %' LEFT-JUSTIFIED,
(20) FINAL_PA9325-DEC_LIAB_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-DEC_LIAB_AMNT RIGHT-JUSTIFIED.
ELSE.
WRITE:/(50) FINAL_PA9325-DEC_LIAB_TEXT LEFT-JUSTIFIED,
(20) FINAL_PA9325-DEC_LIAB_PCNT RIGHT-JUSTIFIED, (20)
FINAL_PA9325-DEC_LIAB_AMNT RIGHT-JUSTIFIED.
ENDIF.

WRITE:/(70) '-'.

WRITE:/(70) 'Net Annual Tax' LEFT-JUSTIFIED, (21)


FINAL_PA9325-NET_TAX_ANNUAL RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Previous Tax YTD' LEFT-JUSTIFIED, (21)


FINAL_PA9325-P_TAX_YTD RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Tax Liability' LEFT-JUSTIFIED, (21)


FINAL_PA9325-TAX_LIABILITY RIGHT-JUSTIFIED.

IF FINAL_PA9325-TAX_OVERRIDE = 'X'.
WRITE:/(70) 'Tax Override' LEFT-JUSTIFIED, (20) 'YES' RIGHT-
JUSTIFIED.
ELSE.
WRITE:/(70) 'Tax Override' LEFT-JUSTIFIED, (20) 'NO' RIGHT-
JUSTIFIED.
ENDIF.

WRITE:/(70) 'Tax for the Month' LEFT-JUSTIFIED, (21)


FINAL_PA9325-TAX_MONTH RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Tax YTD' LEFT-JUSTIFIED, (21)


FINAL_PA9325-TAX_YTD RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

WRITE:/(70) 'Salary YTD' LEFT-JUSTIFIED, (21)


FINAL_PA9325-SALARY_YTD RIGHT-JUSTIFIED.
WRITE:/(70) 'Bonus YTD' LEFT-JUSTIFIED, (21)
FINAL_PA9325-BONUS_YTD RIGHT-JUSTIFIED.
WRITE:/(70) 'Provident Fund YTD' LEFT-JUSTIFIED, (21)
FINAL_PA9325-PFUND_YTD RIGHT-JUSTIFIED.
WRITE:/(70) 'Exemptions YTD' LEFT-JUSTIFIED, (21)
FINAL_PA9325-EXEMPTED_YTD RIGHT-JUSTIFIED.

WRITE:/(70) '-'.

ULINE.
ENDIF.

ENDIF.

******** Clearing All the Variables **************

IF ITAB-CALCD = SPACE.
FREE MEMORY ID 'SALARY_RETRO'.
FREE MEMORY ID 'MONTHLY_RETRO'.
FREE MEMORY ID 'MONTHLY_AVG_RETRO'.
FREE MEMORY ID 'BONUS_RETRO'.
FREE MEMORY ID 'BONUS_AVG_RETRO'.
FREE MEMORY ID 'PFUND_RETRO'.
FREE MEMORY ID 'EXEMPT_RETRO'.
ENDIF.

CLEAR: PA0002,
PA0014,
PA0015,
PA0267,
PA9325,
PA9315,
PA0045,
PA0078.

REFRESH: ITAB_WAGES, ITAB_LOANS, ITAB_PA0008,


ITAB_PA0014, GROSS_SALARY.

CLEAR: FINAL_PA9325, ITAB_WAGES, ITAB_LOANS,


ITAB_PA0008, ITAB_PA0014, GROSS_SALARY,
MESSAGE_HANDLER.

CLEAR: ITAB,
TAX_PERIODS,
TAX_DETAILS,

TAX_PERIOD,
PAY_PERIOD,
TAX_YEAR,
TAX_MONTH,
OLD_END_DATE,
FIRST_YEAR_DATE,
LAST_YEAR_DATE,
FIRST_MONTH_DATE,
LAST_MONTH_DATE,
REM_TAX_PERIODS,
LAST_TAX_PERIOD,
LEAVING_DATE,

ANNUAL_AMNT,
ANNUAL_MD_AMNT,
MONTHLY_AMNT,
MONTHLY_AVG_AMNT,
BONUS_AMNT,
BONUS_AVG_AMNT,
EXEMPTED_AMNT,
PFUND_AMNT,
THIS_TIME_MONTHLY,
THIS_TIME_BONUS,

TAX_RETRO,
SALARY_RETRO,
MONTHLY_RETRO,
MONTHLY_AVG_RETRO,
BONUS_RETRO,
BONUS_AVG_RETRO,
PFUND_RETRO,
EXEMPT_RETRO,

PREV_SALARY_AMNT,
CURR_SALARY_AMNT,
PREV_MONTHLY_AMNT,
CURR_MONTHLY_AMNT,
PREV_MONTHLY_AVG_AMNT,
CURR_MONTHLY_AVG_AMNT,
PREV_BONUS_AMNT,
CURR_BONUS_AMNT,
PREV_BONUS_AVG_AMNT,
CURR_BONUS_AVG_AMNT,
PREV_PFUND_AMNT,
CURR_PFUND_AMNT,
PREV_EXEMPT_AMNT,
CURR_EXEMPT_AMNT,
EXEMPT_PERCENTAGE,

TAXABLE_AMOUNT,
TAXABLE_BONUS,
EXEMPTED_AMOUNT,
PFUND_AMOUNT,

DIFF_PERCENT,
LOAN_GRANTED,
LOAN_EXEMPT,
LOAN_BALANCE,
LOAN_DEDUCTION,
LOAN_PAYMENTS,
LOAN_PREV_BALANCE,
LOAN_AMOUNT,

AGE_IN_YEARS,
AGE_IN_DAYS,
AGE_RELIEF_AMOUNT,

ANNUAL_TAX,
MONTHLY_TAX,
BONUS_TAX,
BONUS_TAX_MONTH,
TAX_LIABILITY,
TAX_ROUNDING,

INV_IN_SHARES,
HEALTH_INS_PREM,
DONATION_CHARITY,
PFUND_CONTRIBUTION,
TAX_OVERRIDE_CHECK,
TAX_OVERRIDE_AMOUNT,

NEGATIVE_SALARY_CHECK,
NEGATIVE_SALARY_AMOUNT,

INC_GROSS_AMOUNT,
DEC_GROSS_AMOUNT,
INC_LIAB_AMOUNT,
DEC_LIAB_AMOUNT,

DONATIONS_AMOUNT,
DON_CHA_AMOUNT,
INV_SHARES_AMOUNT,
HIPREMIUMS_AMOUNT,
PENSION_CTR_AMOUNT,
MARK_UP_AMOUNT,

PREV_PFUND_LIMIT,
PREV_OLD_END_DATE.

ENDFORM. "fuzitax

You might also like