You are on page 1of 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