0% found this document useful (0 votes)
42 views

PAC874247 Codechanges

The document describes changes made to the CPF FM CALCULATION to fix a bug related to CPF not being computed correctly for additional wages payable in October 2011. The changes involve modifying the logic to first subtract any retroactive adjustments to ordinary and additional wages before calculating total wages. Additional details on how CPF amounts are then calculated based on the modified wages are also provided.

Uploaded by

Rohan Vance
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views

PAC874247 Codechanges

The document describes changes made to the CPF FM CALCULATION to fix a bug related to CPF not being computed correctly for additional wages payable in October 2011. The changes involve modifying the logic to first subtract any retroactive adjustments to ordinary and additional wages before calculating total wages. Additional details on how CPF amounts are then calculated based on the modified wages are also provided.

Uploaded by

Rohan Vance
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 6

POC SG874247

CPF FM CALCULATION has been modified to solve the Bug: 13384633 - CPF Not
Computed for AW Payable in Oct 2011.
Before Change (CPF FM CALCULATION)
AC[CPF ORD WAGES MTD] - ER[CPF RETRO AD] >> AC[CPF ORD WAGES MTD]
AC[CPF ADD WAGES MTD] - ER[CPF RTO AWS] >> AC[CPF ADD WAGES MTD]
AC[CPF ORD WAGES MTD] + AC[CPF ADD WAGES MTD] >> VR[CPF VR TOT WGS MTD]
IF VR[CPF VR SECTOR] = '1' THEN
VR[CPF VR OW Y LMT S1] >> VR[CPF VR ORD LIMIT]
ELSE
VR[CPF VR OW Y LMT S3] >> VR[CPF VR ORD LIMIT]
ENDIF
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] THEN
DT[CPF DT PERM YMD] >> VR[GP TEMP001 DATE]
IF VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND VR[CPF VR PERM YR] = VR[CPF VR SEGMENT
YR] THEN
SY[SEGMENT BEGIN DATE] >> VR[CPF VR SEGMENT DT]
SY[SEGMENT BEGIN DATE] >> VR[GP TEMP002 DATE]
VR[CPF VR TOT WGS MTD] * PO[CPF PO PR WORK DAY] >> VR[CPF VR TOT WGS MTD]
AC[CPF ADD WAGES SEG] >> AC[CPF ADD WAGES YTD]
0 >> AC[CPF AC PRV ADD LMT]
1 >> VR[CPF VR SEG PR FLAG]
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
0 >> AC[CPF AC ORD NXT YTD]
ELSE
0 >> VR[CPF VR SEG PR FLAG]
ENDIF
ENDIF
AR[CPF AR RATES] >> VR[CPF VR CALL ARRAY]
AC[CPF ADD WAGES MTD] >> VR[CPF VR ADD WAGES]
IF VR[CPF VR ADD WAGES] <> 0 OR VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] =
SY[TERMINATION DT] OR DT[CPF DT PRV PAY MTH] = SY[TERMINATION DT] THEN
IF VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] = SY[TERMINATION DT] OR DT[CPF DT PRV
PAY MTH] = SY[TERMINATION DT] THEN
SY[PERIOD END DATE] >> VR[CPF VR ACC REF DT]
AC[CPF AC ORD LMT YTD] >> VR[GP TEMP001 NUM]
ELSE
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR EE OW EST] <> 0 THEN
MIN ( VR[CPF VR EE OW EST] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ELSE
MIN ( AC[CPF ORD WAGES YTD] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ENDIF
ENDIF
IF AC[CPF ORD WAGES MTD] = 0 AND VR[CPF VR PAY END MTH] = 12 THEN
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR EE OW EST] <> 0 THEN
MIN ( VR[CPF VR EE OW EST] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ELSE
MIN ( AC[CPF ORD WAGES YTD] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ENDIF
ENDIF
VR[CPF VR TOT CEILING] - VR[GP TEMP001 NUM] >> VR[CPF VR ADD LIMIT]
SY[SEGMENT END DATE] >> VR[CPF VR ACC REF DT]
AC[CPF ADD WAGES YTD] >> VR[CPF VR ADD WGS YTD]
IF VR[CPF VR ADD WGS YTD] > VR[CPF VR ADD LIMIT] THEN
VR[CPF VR ADD WGS YTD] - VR[CPF VR ADD WAGES] >> VR[CPF VR ADD YTD-MTD]
IF VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] = SY[TERMINATION DT] OR DT[CPF DT
PRV PAY MTH] = SY[TERMINATION DT] THEN
VR[CPF VR ADD LIMIT] - AC[CPF AC PRV ADD LMT] >> VR[CPF VR ADD WAGES]
IF VR[CPF VR ADD WAGES] < 0 THEN

0 >> VR[CPF VR ADD WAGES]


ENDIF
ELSE
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] THEN
0 >> VR[CPF VR ADD WAGES]
ELSE
VR[CPF VR ADD LIMIT] - VR[CPF VR ADD YTD-MTD] >> VR[CPF VR ADD WAGES]
ENDIF
ENDIF
VR[CPF VR RT PCT ADD] - AC[CPF AC PCT TOT ADD] >> VR[CPF VR PCT TOT ADD]
VR[CPF VR RT RPCT ADD] - AC[CPF AC RT RPCT ADD] >> VR[CPF VR PCT EE ADD]
ELSE
IF AC[CPF ADD WAGES SEG] < AC[CPF ADD WAGES MTD] THEN
AC[CPF ADD WAGES MTD] >> VR[CPF VR ADD WAGES]
ELSE
VR[CPF VR ADD WGS YTD] - AC[CPF AC PRV ADD LMT] >> VR[CPF VR ADD WAGES]
ENDIF
ENDIF
IF AC[CPF ADD WAGES SEG] <> 0 THEN
VR[CPF VR ADD WAGES] - ( AC[CPF ADD WAGES MTD] - AC[CPF ADD WAGES SEG] ) >> VR[GP
TEMP005 NUM]
ELSE
VR[CPF VR ADD WAGES] >> VR[GP TEMP005 NUM]
ENDIF
IF VR[CPF VR SEG PR FLAG] = 1 THEN
VR[GP TEMP005 NUM] * PO[CPF PO PR WORK DAY] >> VR[CPF VR PRV ADD LMT]
AC[CPF ADD WAGES SEG] * PO[CPF PO PR WORK DAY] >> AC[CPF ADD WAGES YTD]
ELSE
VR[GP TEMP005 NUM] >> VR[CPF VR PRV ADD LMT]
ENDIF
ENDIF
AC[CPF ORD WAGES MTD] - AC[CPF NP WAGES MTD] >> VR[CPF VR ORD EXCL NP]
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] AND SY[SEGMENT END DATE] = SY[TERMINATION DT]
AND AC[CPF ADD WAGES MTD] = 0 THEN
VR[CPF VR ORD EXCL NP] >> VR[CPF VR ORD EXCL NP]
ELSE
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] THEN
VR[CPF VR ORD EXCL NP] + VR[CPF VR ADD WAGES] >> VR[CPF VR ORD EXCL NP]
ENDIF
ENDIF
VR[CPF VR ORD EXCL NP] * VR[CPF VR RT PCT ORD] >> VR[CPF VR TOT ORD CPF]
AC[CPF NP WAGES MTD] * VR[CPF VR RT PCT NP] >> VR[CPF VR TOT NP CPF]
( VR[CPF VR TOT ORD CPF] + VR[CPF VR TOT NP CPF] ) / 100 >> VR[CPF VR TOT ORD CPF]
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] THEN
DT[CPF DT PERM YMD] >> VR[GP TEMP001 DATE]
IF VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND VR[CPF VR PERM YR] = VR[CPF VR SEGMENT
YR] THEN
SY[SEGMENT BEGIN DATE] >> VR[CPF VR SEGMENT DT]
SY[SEGMENT BEGIN DATE] >> VR[GP TEMP002 DATE]
VR[CPF VR TOT ORD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR TOT ORD CPF]
ENDIF
ENDIF
IF VR[CPF VR TOT ORD CPF] > VR[CPF VR RT LIMIT] AND VR[CPF VR RT LIMIT] <> 0 THEN
VR[CPF VR RT LIMIT] >> VR[CPF VR TOT ORD CPF]
ENDIF
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] AND SY[SEGMENT END DATE] = SY[TERMINATION DT]
AND AC[CPF ADD WAGES MTD] = 0 THEN
AC[CPF ORD WAGES MTD] >> VR[CPF VR WAGE BASE1]
ELSE
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] THEN
AC[CPF ORD WAGES MTD] + VR[CPF VR ADD WAGES] >> VR[CPF VR WAGE BASE1]
ELSE
VR[CPF VR ORD EXCL NP] >> VR[CPF VR WAGE BASE1]
ENDIF
ENDIF
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] AND VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND
VR[CPF VR PERM YR] = VR[CPF VR SEGMENT YR] THEN
VR[CPF VR TOT WGS MTD] >> VR[CPF VR WAGE BASE1]
ENDIF
VR[CPF VR TOT ORD CPF] + FM[CPF FM ORD DIFF] >> VR[CPF VR TOT ORD CPF]
IF ( SY[SEGMENT END DATE] = SY[TERMINATION DT] AND AC[CPF ADD WAGES MTD] = 0 ) OR ( VR[CPF VR ADD

WAGES] >= VR[CPF VR RT WAGES] AND SY[SEGMENT END DATE] = SY[TERMINATION DT] ) THEN
VR[CPF VR TOT ORD CPF] >> VR[CPF VR TOT ORD CPF]
HR[CPF HR ADD ADJUST] >> VR[GP TEMP002 NUM]
VR[CPF VR ADD WAGES] * VR[CPF VR PCT ADD] / 100 >> VR[CPF VR TOT ADD CPF]
ELSE
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] AND VR[CPF VR SEGMENT MTH] <> 12 AND
SY[SEGMENT END DATE] <> SY[TERMINATION DT] THEN
0 >> VR[CPF VR TOT ADD CPF]
ELSE
VR[CPF VR ADD WAGES] * VR[CPF VR RT PCT ADD] / 100 >> VR[CPF VR TOT ADD CPF]
ENDIF
ENDIF
VR[CPF VR ORD EXCL NP] * VR[CPF VR RT RPCT ORD] >> VR[CPF VR EE ORD CPF]
AC[CPF NP WAGES MTD] * VR[CPF VR RT RPCT NP] >> VR[CPF VR EE NP CPF]
( VR[CPF VR EE ORD CPF] + VR[CPF VR EE NP CPF] ) / 100 >> VR[CPF VR EE ORD CPF]
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] AND VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND
VR[CPF VR PERM YR] = VR[CPF VR SEGMENT YR] THEN
VR[CPF VR EE ORD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR EE ORD CPF]
ENDIF
IF VR[CPF VR EE ORD CPF] > VR[CPF VR RT RLIMIT] AND VR[CPF VR RT RLIMIT] <> 0 THEN
VR[CPF VR RT RLIMIT] >> VR[CPF VR EE ORD CPF]
ENDIF
IF VR[CPF VR EE ORD CPF] > VR[CPF VR MAX ORD DED] THEN
VR[CPF VR TOT ORD CPF] - VR[CPF VR EE ORD CPF] + VR[CPF VR MAX ORD DED] >> VR[CPF VR TOT ORD
CPF]
VR[CPF VR MAX ORD DED] >> VR[CPF VR EE ORD CPF]
ENDIF
VR[CPF VR EE ORD CPF] + FM[CPF FM EE ORD DIFF] >> VR[CPF VR EE ORD CPF]
IF ( SY[SEGMENT END DATE] = SY[TERMINATION DT] AND AC[CPF ADD WAGES MTD] = 0 ) OR ( VR[CPF VR ADD
WAGES] >= VR[CPF VR RT WAGES] AND SY[SEGMENT END DATE] = SY[TERMINATION DT] ) THEN
VR[CPF VR EE ORD CPF] >> VR[CPF VR EE ORD CPF]
VR[CPF VR ADD WAGES] * VR[CPF VR RPCT ADD] / 100 >> VR[CPF VR EE ADD CPF]
ELSE
VR[CPF VR ADD WAGES] * VR[CPF VR RT RPCT ADD] / 100 >> VR[CPF VR EE ADD CPF]
ENDIF
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] THEN
DT[CPF DT PERM YMD] >> VR[GP TEMP001 DATE]
IF VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND VR[CPF VR PERM YR] = VR[CPF VR SEGMENT
YR] AND VR[CPF VR RT WAGE TYP] <> VR[CPF VR WT TOT WAGE] THEN
SY[SEGMENT BEGIN DATE] >> VR[CPF VR SEGMENT DT]
VR[CPF VR TOT ADD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR TOT ADD CPF]
VR[CPF VR EE ADD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR EE ADD CPF]
ENDIF
ENDIF
VR[CPF VR TOT ORD CPF] + VR[CPF VR TOT ADD CPF] >> VR[CPF VR TOT CPF][CMN RR NEAR 0 DEC]
VR[CPF VR TOT ORD CPF] >> VR[CPF VR TOT ORD CPF][GP ROUND NEAR 0DEC]
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] AND ( ( VR[CPF VR SEGMENT MTH] <> 12 OR AC[CPF
ORD WAGES MTD] = 0 ) AND SY[SEGMENT END DATE] <> SY[TERMINATION DT] ) THEN
0 >> VR[CPF VR TOT ADD CPF]
ELSE
VR[CPF VR TOT CPF] - VR[CPF VR TOT ORD CPF] >> VR[CPF VR TOT ADD CPF]
ENDIF
VR[CPF VR EE ORD CPF] + VR[CPF VR EE ADD CPF] >> VR[CPF VR EE CPF][CMN RR DOWN 0 DEC]
VR[CPF VR EE ORD CPF] >> VR[CPF VR EE ORD CPF][GP ROUND DOWN 0DEC]
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] AND ( ( VR[CPF VR SEGMENT MTH] <> 12 OR AC[CPF
ORD WAGES MTD] = 0 ) AND SY[SEGMENT END DATE] <> SY[TERMINATION DT] ) THEN
0 >> VR[CPF VR EE ADD CPF]
ELSE
VR[CPF VR EE CPF] - VR[CPF VR EE ORD CPF] >> VR[CPF VR EE ADD CPF]
ENDIF
VR[CPF VR TOT ORD CPF] - VR[CPF VR EE ORD CPF] >> VR[CPF VR ER ORD CPF]
VR[CPF VR TOT ADD CPF] - VR[CPF VR EE ADD CPF] >> VR[CPF VR ER ADD CPF]
AC[CPF ORD WAGES MTD] + ER[CPF RETRO AD] >> AC[CPF ORD WAGES MTD]
AC[CPF ADD WAGES MTD] + ER[CPF RTO AWS] >> AC[CPF ADD WAGES MTD]

After Change (CPF FM CALCULATION)


AC[CPF ORD WAGES MTD] - ER[CPF RETRO AD] >> AC[CPF ORD WAGES MTD]
AC[CPF ADD WAGES MTD] - ER[CPF RTO AWS] >> AC[CPF ADD WAGES MTD]
AC[CPF ORD WAGES MTD] + AC[CPF ADD WAGES MTD] >> VR[CPF VR TOT WGS MTD]
IF VR[CPF VR SECTOR] = '1' THEN
VR[CPF VR OW Y LMT S1] >> VR[CPF VR ORD LIMIT]
ELSE
VR[CPF VR OW Y LMT S3] >> VR[CPF VR ORD LIMIT]
ENDIF
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] THEN
DT[CPF DT PERM YMD] >> VR[GP TEMP001 DATE]
IF VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND VR[CPF VR PERM YR] = VR[CPF VR SEGMENT
YR] THEN
SY[SEGMENT BEGIN DATE] >> VR[CPF VR SEGMENT DT]
SY[SEGMENT BEGIN DATE] >> VR[GP TEMP002 DATE]
VR[CPF VR TOT WGS MTD] * PO[CPF PO PR WORK DAY] >> VR[CPF VR TOT WGS MTD]
AC[CPF ADD WAGES SEG] >> AC[CPF ADD WAGES YTD]
0 >> AC[CPF AC PRV ADD LMT]
1 >> VR[CPF VR SEG PR FLAG]
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
0 >> AC[CPF AC ORD NXT YTD]
ELSE
0 >> VR[CPF VR SEG PR FLAG]
ENDIF
ENDIF
AR[CPF AR RATES] >> VR[CPF VR CALL ARRAY]
AC[CPF ADD WAGES MTD] >> VR[CPF VR ADD WAGES]
IF VR[CPF VR ADD WAGES] <> 0 OR VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] =
SY[TERMINATION DT] OR DT[CPF DT PRV PAY MTH] = SY[TERMINATION DT] THEN
IF VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] = SY[TERMINATION DT] OR DT[CPF DT PRV
PAY MTH] = SY[TERMINATION DT] THEN
SY[PERIOD END DATE] >> VR[CPF VR ACC REF DT]
AC[CPF AC ORD LMT YTD] >> VR[GP TEMP001 NUM]
ELSE
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR EE OW EST] <> 0 THEN
MIN ( VR[CPF VR EE OW EST] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ELSE
MIN ( AC[CPF ORD WAGES YTD] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ENDIF
ENDIF
IF AC[CPF ORD WAGES MTD] = 0 AND VR[CPF VR PAY END MTH] = 12 THEN
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR EE OW EST] <> 0 THEN
MIN ( VR[CPF VR EE OW EST] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ELSE
MIN ( AC[CPF ORD WAGES YTD] VR[CPF VR ORD LIMIT] ) >> VR[GP TEMP001 NUM]
ENDIF
ENDIF
VR[CPF VR TOT CEILING] - VR[GP TEMP001 NUM] >> VR[CPF VR ADD LIMIT]
SY[SEGMENT END DATE] >> VR[CPF VR ACC REF DT]
AC[CPF ADD WAGES YTD] >> VR[CPF VR ADD WGS YTD]
IF VR[CPF VR ADD WGS YTD] > VR[CPF VR ADD LIMIT] THEN
VR[CPF VR ADD WGS YTD] - VR[CPF VR ADD WAGES] >> VR[CPF VR ADD YTD-MTD]
IF VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] = SY[TERMINATION DT] OR DT[CPF DT
PRV PAY MTH] = SY[TERMINATION DT] THEN
VR[CPF VR ADD LIMIT] - AC[CPF AC PRV ADD LMT] >> VR[CPF VR ADD WAGES]
IF VR[CPF VR ADD WAGES] < 0 THEN
0 >> VR[CPF VR ADD WAGES]
ENDIF
ELSE
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] THEN
0 >> VR[CPF VR ADD WAGES]
ELSE
VR[CPF VR ADD LIMIT] - VR[CPF VR ADD YTD-MTD] >> VR[CPF VR ADD WAGES]
ENDIF
ENDIF
VR[CPF VR RT PCT ADD] - AC[CPF AC PCT TOT ADD] >> VR[CPF VR PCT TOT ADD]

VR[CPF VR RT RPCT ADD] - AC[CPF AC RT RPCT ADD] >> VR[CPF VR PCT EE ADD]
ELSE
IF AC[CPF ADD WAGES SEG] < AC[CPF ADD WAGES MTD] THEN
AC[CPF ADD WAGES MTD] >> VR[CPF VR ADD WAGES]
ELSE
VR[CPF VR ADD WGS YTD] - AC[CPF AC PRV ADD LMT] >> VR[CPF VR ADD WAGES]
ENDIF
ENDIF
IF AC[CPF ADD WAGES SEG] <> 0 THEN
VR[CPF VR ADD WAGES] - ( AC[CPF ADD WAGES MTD] - AC[CPF ADD WAGES SEG] ) >> VR[GP
TEMP005 NUM]
ELSE
IF VR[CPF VR PAY END MTH] = 12 OR SY[SEGMENT END DATE] = SY[TERMINATION DT] OR DT[CPF DT
PRV PAY MTH] = SY[TERMINATION DT] THEN
VR[CPF VR ADD WAGES] - AC[CPF ADD WAGES MTD] - AC[CPF ADD WAGES SEG] >> VR[GP
TEMP005 NUM]
ELSE
0 >> VR[GP TEMP005 NUM]
ENDIF
ENDIF
IF VR[CPF VR SEG PR FLAG] = 1 THEN
VR[GP TEMP005 NUM] * PO[CPF PO PR WORK DAY] >> VR[CPF VR PRV ADD LMT]
AC[CPF ADD WAGES SEG] * PO[CPF PO PR WORK DAY] >> AC[CPF ADD WAGES YTD]
ELSE
VR[GP TEMP005 NUM] >> VR[CPF VR PRV ADD LMT]
ENDIF
ENDIF
AC[CPF ORD WAGES MTD] - AC[CPF NP WAGES MTD] >> VR[CPF VR ORD EXCL NP]
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] AND SY[SEGMENT END DATE] = SY[TERMINATION DT]
AND AC[CPF ADD WAGES MTD] = 0 THEN
VR[CPF VR ORD EXCL NP] >> VR[CPF VR ORD EXCL NP]
ELSE
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] THEN
VR[CPF VR ORD EXCL NP] + VR[CPF VR ADD WAGES] >> VR[CPF VR ORD EXCL NP]
ENDIF
ENDIF
VR[CPF VR ORD EXCL NP] * VR[CPF VR RT PCT ORD] >> VR[CPF VR TOT ORD CPF]
AC[CPF NP WAGES MTD] * VR[CPF VR RT PCT NP] >> VR[CPF VR TOT NP CPF]
( VR[CPF VR TOT ORD CPF] + VR[CPF VR TOT NP CPF] ) / 100 >> VR[CPF VR TOT ORD CPF]
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] THEN
DT[CPF DT PERM YMD] >> VR[GP TEMP001 DATE]
IF VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND VR[CPF VR PERM YR] = VR[CPF VR SEGMENT
YR] THEN
SY[SEGMENT BEGIN DATE] >> VR[CPF VR SEGMENT DT]
SY[SEGMENT BEGIN DATE] >> VR[GP TEMP002 DATE]
VR[CPF VR TOT ORD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR TOT ORD CPF]
ENDIF
ENDIF
IF VR[CPF VR TOT ORD CPF] > VR[CPF VR RT LIMIT] AND VR[CPF VR RT LIMIT] <> 0 THEN
VR[CPF VR RT LIMIT] >> VR[CPF VR TOT ORD CPF]
ENDIF
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] AND SY[SEGMENT END DATE] = SY[TERMINATION DT]
AND AC[CPF ADD WAGES MTD] = 0 THEN
AC[CPF ORD WAGES MTD] >> VR[CPF VR WAGE BASE1]
ELSE
IF VR[CPF VR RT WAGE TYP] = VR[CPF VR WT TOT WAGE] THEN
AC[CPF ORD WAGES MTD] + VR[CPF VR ADD WAGES] >> VR[CPF VR WAGE BASE1]
ELSE
VR[CPF VR ORD EXCL NP] >> VR[CPF VR WAGE BASE1]
ENDIF
ENDIF
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] AND VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND
VR[CPF VR PERM YR] = VR[CPF VR SEGMENT YR] THEN
VR[CPF VR TOT WGS MTD] >> VR[CPF VR WAGE BASE1]
ENDIF
VR[CPF VR TOT ORD CPF] + FM[CPF FM ORD DIFF] >> VR[CPF VR TOT ORD CPF]
IF ( SY[SEGMENT END DATE] = SY[TERMINATION DT] AND AC[CPF ADD WAGES MTD] = 0 ) OR ( VR[CPF VR ADD
WAGES] >= VR[CPF VR RT WAGES] AND SY[SEGMENT END DATE] = SY[TERMINATION DT] ) THEN
VR[CPF VR TOT ORD CPF] >> VR[CPF VR TOT ORD CPF]
HR[CPF HR ADD ADJUST] >> VR[GP TEMP002 NUM]
VR[CPF VR ADD WAGES] * VR[CPF VR PCT ADD] / 100 >> VR[CPF VR TOT ADD CPF]

ELSE
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] AND VR[CPF VR SEGMENT MTH] <> 12 AND
SY[SEGMENT END DATE] <> SY[TERMINATION DT] THEN
0 >> VR[CPF VR TOT ADD CPF]
ELSE
VR[CPF VR ADD WAGES] * VR[CPF VR RT PCT ADD] / 100 >> VR[CPF VR TOT ADD CPF]
ENDIF
ENDIF
VR[CPF VR ORD EXCL NP] * VR[CPF VR RT RPCT ORD] >> VR[CPF VR EE ORD CPF]
AC[CPF NP WAGES MTD] * VR[CPF VR RT RPCT NP] >> VR[CPF VR EE NP CPF]
( VR[CPF VR EE ORD CPF] + VR[CPF VR EE NP CPF] ) / 100 >> VR[CPF VR EE ORD CPF]
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] AND VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND
VR[CPF VR PERM YR] = VR[CPF VR SEGMENT YR] THEN
VR[CPF VR EE ORD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR EE ORD CPF]
ENDIF
IF VR[CPF VR EE ORD CPF] > VR[CPF VR RT RLIMIT] AND VR[CPF VR RT RLIMIT] <> 0 THEN
VR[CPF VR RT RLIMIT] >> VR[CPF VR EE ORD CPF]
ENDIF
IF VR[CPF VR EE ORD CPF] > VR[CPF VR MAX ORD DED] THEN
VR[CPF VR TOT ORD CPF] - VR[CPF VR EE ORD CPF] + VR[CPF VR MAX ORD DED] >> VR[CPF VR TOT ORD
CPF]
VR[CPF VR MAX ORD DED] >> VR[CPF VR EE ORD CPF]
ENDIF
VR[CPF VR EE ORD CPF] + FM[CPF FM EE ORD DIFF] >> VR[CPF VR EE ORD CPF]
IF ( SY[SEGMENT END DATE] = SY[TERMINATION DT] AND AC[CPF ADD WAGES MTD] = 0 ) OR ( VR[CPF VR ADD
WAGES] >= VR[CPF VR RT WAGES] AND SY[SEGMENT END DATE] = SY[TERMINATION DT] ) THEN
VR[CPF VR EE ORD CPF] >> VR[CPF VR EE ORD CPF]
VR[CPF VR ADD WAGES] * VR[CPF VR RPCT ADD] / 100 >> VR[CPF VR EE ADD CPF]
ELSE
VR[CPF VR ADD WAGES] * VR[CPF VR RT RPCT ADD] / 100 >> VR[CPF VR EE ADD CPF]
ENDIF
IF VR[CPF VR CITIZENSHIP] = VR[CPF VR CS PR] THEN
DT[CPF DT PERM YMD] >> VR[GP TEMP001 DATE]
IF VR[CPF VR PERM MTH] = VR[CPF VR SEGMENT MTH] AND VR[CPF VR PERM YR] = VR[CPF VR SEGMENT
YR] AND VR[CPF VR RT WAGE TYP] <> VR[CPF VR WT TOT WAGE] THEN
SY[SEGMENT BEGIN DATE] >> VR[CPF VR SEGMENT DT]
VR[CPF VR TOT ADD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR TOT ADD CPF]
VR[CPF VR EE ADD CPF] * PO[CPF PO PR WORK DAY] >> VR[CPF VR EE ADD CPF]
ENDIF
ENDIF
VR[CPF VR TOT ORD CPF] + VR[CPF VR TOT ADD CPF] >> VR[CPF VR TOT CPF][CMN RR NEAR 0 DEC]
VR[CPF VR TOT ORD CPF] >> VR[CPF VR TOT ORD CPF][GP ROUND NEAR 0DEC]
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] AND ( ( VR[CPF VR SEGMENT MTH] <> 12 OR AC[CPF
ORD WAGES MTD] = 0 ) AND SY[SEGMENT END DATE] <> SY[TERMINATION DT] ) THEN
0 >> VR[CPF VR TOT ADD CPF]
ELSE
VR[CPF VR TOT CPF] - VR[CPF VR TOT ORD CPF] >> VR[CPF VR TOT ADD CPF]
ENDIF
VR[CPF VR EE ORD CPF] + VR[CPF VR EE ADD CPF] >> VR[CPF VR EE CPF][CMN RR DOWN 0 DEC]
VR[CPF VR EE ORD CPF] >> VR[CPF VR EE ORD CPF][GP ROUND DOWN 0DEC]
DT[CPF DT PREV YR END] >> VR[CPF VR ACC REF DT]
IF VR[CPF VR ADD YTD-MTD] > VR[CPF VR ADD LIMIT] AND ( ( VR[CPF VR SEGMENT MTH] <> 12 OR AC[CPF
ORD WAGES MTD] = 0 ) AND SY[SEGMENT END DATE] <> SY[TERMINATION DT] ) THEN
0 >> VR[CPF VR EE ADD CPF]
ELSE
VR[CPF VR EE CPF] - VR[CPF VR EE ORD CPF] >> VR[CPF VR EE ADD CPF]
ENDIF
VR[CPF VR TOT ORD CPF] - VR[CPF VR EE ORD CPF] >> VR[CPF VR ER ORD CPF]
VR[CPF VR TOT ADD CPF] - VR[CPF VR EE ADD CPF] >> VR[CPF VR ER ADD CPF]
AC[CPF ORD WAGES MTD] + ER[CPF RETRO AD] >> AC[CPF ORD WAGES MTD]
AC[CPF ADD WAGES MTD] + ER[CPF RTO AWS] >> AC[CPF ADD WAGES MTD]

You might also like