Optional Form COBOL may resolve the incorrect Spouse or Beneficiary Age when applying the Simplified Method.
The Simplified Non-Taxable Amount calculation divisor for Joint & Survivor Optional Forms is based on the combined Member and Survivor Ages:
Combine Member and Survivor Ages | Expected Monthly Payments |
110 and under | 410 |
111 to 120 | 360 |
121 to 130 | 310 |
131 to 140 | 260 |
141 and over | 210 |
Issue
The Optional Form module (PAPUCSTM) resolves the Spouse or Beneficiary Age using the Date Math module (PAPUDTGN), but does not set the Action Type to be used by the Date Math module before calling it:
******************************************************************
* *
CD324-GET-PEN-BENEF-DATA SECTION.
CD324.
* *
* GET PENSION BENEFICIARY DATA FOR THE PLAN FROM LINKAGE *
******************************************************************
IF TRACE-THIS-PGM
STRING '--->GET-PEN-BENEF-DATA '
DELIMITED BY SIZE
INTO PA-AUDIT-TXT OF AUDIT-INFO OF UAUDT
CALL 'PAPUAUDT' USING COPY PACUSING.
STRING 'SPOUSE-DOB = '
SPOUSE-DOB OF PERSONAL-DATA
DELIMITED BY SIZE
INTO PA-AUDIT-TXT OF AUDIT-INFO OF UAUDT
CALL 'PAPUAUDT' USING COPY PACUSING.
STRING 'BENEF-DOB = '
BENEF-DOB OF PERSONAL-DATA
DELIMITED BY SIZE
INTO PA-AUDIT-TXT OF AUDIT-INFO OF UAUDT
CALL 'PAPUAUDT' USING COPY PACUSING.
MOVE BFT-AUTO-AMT TO W-DISPLAY-AMT
STRING 'BFT-AUTO-AMT = '
W-DISPLAY-AMT
DELIMITED BY SIZE
INTO PA-AUDIT-TXT OF AUDIT-INFO OF UAUDT
CALL 'PAPUAUDT' USING COPY PACUSING.
END-IF
MOVE 0 TO W-BENEF-COUNT
IF SPOUSE-DOB OF PERSONAL-DATA > '0000-00-00'
AND ( (ALLOW-CONTINGENTS AND BFT-AUTO-AMT > 0)
OR (OPTFORM-CALC-RSLTS (RSLT-SUB) = 'SPJS')
OR (NOT ALLOW-CONTINGENTS) )
* AND SPOUSE-ALIVE-AT-BCD
ADD 1 TO W-BENEF-COUNT
MOVE SPOUSE-DOB OF PERSONAL-DATA TO IN-DATE
MOVE BEN-CMDT-DATE OF CALC-DATA TO IN-DATE-2
******************************************************************
* 04/05/2023 MWT - Mark Tomsheck, PSPA Tech Inc. *
* DT-00254 PSPA Tech (DT) Modified Code *
* Fix Issue with resolution of Spouse/Bene *
* age during Simplified Method for J&S Options. *
* *
SET ACT-TYPE-SUB-DATES TO TRUE
* 04/05/2023 MWT - End Change *
******************************************************************
CALL 'PAPUDTGN' USING COPY PACUSING.
MOVE OUT-YR OF OUT-DATE TO W-BENEF-AGE
W-MIN-AGE
W-MAX-AGE
IF TRACE-THIS-PGM
STRING 'ADDING SPOUSE AGE =' W-BENEF-AGE
DELIMITED BY SIZE
INTO PA-AUDIT-TXT OF AUDIT-INFO OF UAUDT
CALL 'PAPUAUDT' USING COPY PACUSING.
END-IF
END-IF
IF BENEF-DOB OF PERSONAL-DATA > '0000-00-00'
AND ALLOW-CONTINGENTS
AND NOT FORM-CODE OF OPTFORM-CALC-RSLTS (RSLT-SUB) = 'SPJS'
* AND BENEF-ALIVE-AT-BCD
ADD 1 TO W-BENEF-COUNT
MOVE BENEF-DOB OF PERSONAL-DATA TO IN-DATE
MOVE BEN-CMDT-DATE OF CALC-DATA TO IN-DATE-2
******************************************************************
* 04/05/2023 MWT - Mark Tomsheck, PSPA Tech Inc. *
* DT-00254 PSPA Tech (DT) Modified Code *
* Fix Issue with resolution of Spouse/Bene *
* age during Simplified Method for J&S Options. *
* *
SET ACT-TYPE-SUB-DATES TO TRUE
* 04/05/2023 MWT - End Change *
******************************************************************
CALL 'PAPUDTGN' USING COPY PACUSING.
IF TRACE-THIS-PGM
STRING 'ADDING BENEF AGE =' OUT-YR
DELIMITED BY SIZE
INTO PA-AUDIT-TXT OF AUDIT-INFO OF UAUDT
CALL 'PAPUAUDT' USING COPY PACUSING.
END-IF
IF W-BENEF-COUNT = 1
MOVE OUT-YR OF OUT-DATE TO W-BENEF-AGE
W-MIN-AGE
W-MAX-AGE
ELSE
EVALUATE TRUE
WHEN OUT-YR > W-MAX-AGE
MOVE OUT-YR TO W-MAX-AGE
WHEN OUT-YR < W-MIN-AGE
MOVE OUT-YR TO W-MIN-AGE
W-BENEF-AGE
END-EVALUATE
END-IF
END-IF
COBOL – PAPCOPTF.cblUse Case
The system can be configured to calculate the portion of a pension benefit annuity that is partially funded by member Post-Tax contributions and is Non-Taxable if applicable.
Replicate
The following steps can be used to replicate the issue.
Set up a primary Employee Account and enter the Function Result Name on the Plan Aliases page:
Set up an Optional Form set with Simplified Calculation selected in the Non-Taxable Amount Calculation section:
Run a calculation for a member with Post-Tax contributions in the specified Employee Account. Review the Optional Form Application Trace output (see below) and/or the Optional Form results.
These intermediate results are not stored with the results of the Calculation, so they can only be viewed in the Optional Form Application Trace output:
- Investment In Contract (Total Post-Tax Contributions)
- Combined Member and Survivor Ages, or
- Expected Number of Monthly Payments (Divisor)
This excerpt from the Calculation Optional Form Application Trace shows that the most recently used Date Math Action is used to resolve Spouse/Beneficiary Age. While it appears to resolve the age correctly and return the result 69.876712, the process goes on to use the value 47. This is because the Action used to call the Date Math module does not populate the variable used to move forward.
==============>OPTFORMST_OPT_F
OPTIONAL FORMS PROCESSING BEGINING
OPTIONAL FORM INITIAL RUN
FR ALIAS T_BF901_F = 975.440000
BENEFIT AMOUNT USED = 975.440000
AUTO BENEFIT CALCULATED = 0.000000, NEW BENEFIT AMOUNT = 975.440000
DU ALIAS T_EABC_DU = 69.734247
DB ALIAS BENEF_DOB = 69.734247
DB ALIAS BENCOM_DT = 69.734247
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENEF_DOB = 1948-09-18
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENEF_DOB = 1948-09-18
DB ALIAS BENEF_DOB = 1948-09-18
DB ALIAS BENEF_DOB = 1948-09-18
DB ALIAS BENCOM_DT = 2018-07-01
DATE DURATION-IN 2018-07-01 AND 1948-09-18 /OUT 69.783562
DU ALIAS T_BABC_DU = 69.783562
DU ALIAS T_BABC_DU2 = 69.780000
DU ALIAS T_BABC_DU2 = 69.780000
DU ALIAS T_BABC_DU3 = 70.000000
DU ALIAS T_BABC_DU3 = 70.000000
DU ALIAS T_BABC_DU4 = 837.000000
DU ALIAS T_BABC_DU4 = 837.000000
DU ALIAS T_BABC_DU5 = 0.783562
DU ALIAS T_BABC_DU5 = 0.783562
DU ALIAS T_BABC_DU6 = 9.000000
DU ALIAS T_BABC_DU6 = 9.000000
DU ALIAS T_BABC_DU7 = 286.000000
DU ALIAS T_BABC_DU7 = 286.000000
NON-ACTUARIAL FACTOR BEING RETRIEVED FORM CODE = JS
TL ALIAS T_TJS3_TL = 69.783562
DU ALIAS T_EABC_DU2 = 69.730000
DB ALIAS BIRTH_DT = 69.730000
DB ALIAS BENCOM_DT = 69.730000
DU ALIAS T_BABC_DU2 = 69.780000
DB ALIAS BENEF_DOB = 69.780000
DB ALIAS BENCOM_DT = 69.780000
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENEF_DOB = 1948-09-18
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENEF_DOB = 1948-09-18
DB ALIAS BENEF_DOB = 1948-09-18
DU ALIAS T_BABC_DU2 = 69.780000
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BIRTH_DT = 1948-10-06
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BENCOM_DT = 2018-07-01
DB ALIAS BIRTH_DT = 1948-10-06
DB ALIAS BIRTH_DT = 1948-10-06
DU ALIAS T_EABC_DU2 = 69.730000
DU ALIAS T_EABC_DU2 = 69.730000
DU ALIAS T_BABC_DU2 = 69.780000
DU ALIAS T_BABC_DU2 = 0.949000
FACTOR RETURNED AS 0.949000
PMT-AMT1 = 925.692560 ( 975.440000 * 0.949000)
00000925690000
PMT-AMT2 = 308.254770 ( 925.690000 * 33.300000/100)
TAX-USER-CODE = S RSLT-SUB = 000000001
GUARANTEED-PAYMENT = 000000000
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SET-SIMPLIFIED-NONTAX SECTION
BEN-CMDT-DATE = 2018-07-01
BFT-EE-AGE = 69.734247 BFT-YRS-CERT = 0.000000
RETIREE DT-OF-DEATH =
--->GET-PEN-BENEF-DATA
SPOUSE-DOB = 1948-09-18
BENEF-DOB = 1948-09-18
BFT-AUTO-AMT = 000000000
DATE DURATION-IN 1948-09-18 AND 2018-07-01 /OUT 69.876712
ADDING SPOUSE AGE =0047
MIN-AGE = 0047 MAX AGE = 0047
W-SINGLE-AGE-TYPE = N
GET-PLAN-DATA; BENEFIT-PLAN = TRS ASOFDATE = 2018-07-01
GET-EE-COST-BASIS; CONTRIB-NAME = T_EAREG_F EMPLID = 060187
FR ALIAS T_BESAN_F = N
FR ALIAS T_BEVAN_F = N
FR ALIAS T_BERAN_F = N
CONTRIBUTION ACCT (T_EAREG_F ) FOUND FOR PLAN (TRS )
W-NONTAX-BFT = 21.994444 = 7918.000000 / 360.000000
Optional Form Application Trace OutputWorkaround
There is no easy workaround for this Spouse/Beneficiary Age problem.
The Non-Taxable portion could be set up by creating a view supporting a Database Alias that returns the Investment in Contract, and then a Benefit Formula could be set up for each optional form that resolves the Non-Taxable portion of the benefit. But, this approach would return the result outside of the Optional Forms and not be integrated with setting up the Payment using the delivered process.
There is no override provided for the following Optional Form Function Result values:
- Investment In Contract (Total Post-Tax Contributions)
- Combined Member and Survivor Ages, or
- Expected Number of Monthly Payments (Divisor)
Solution
This issue can be resolved with a COBOL programming change to the Optional Form module (PAPCOPTF) that sets the appropriate Action Type before calling the Date Math module (PAPUDTGN). See the highlighted proposed solution included in the PAPCOPTF COBOL Code above.
Resolution
After the proposed fix is installed and compiled, the Spouse/Beneficiary Age and Non-Taxable Amount are correctly resolved.
The Application Trace output shows that the correct Spouse/Beneficiary Age (69) is resolved after the changes are implemented:
--->GET-PEN-BENEF-DATA
SPOUSE-DOB = 1948-09-18
BENEF-DOB = 1948-09-18
BFT-AUTO-AMT = 000000000
DATE SUBTRACTION-IN 1948-09-18 AND 2018-07-01 /OUT 0069-09-14
ADDING SPOUSE AGE =0069
MIN-AGE = 0069 MAX AGE = 0069
W-SINGLE-AGE-TYPE = N
GET-PLAN-DATA; BENEFIT-PLAN = TRS ASOFDATE = 2018-07-01
GET-EE-COST-BASIS; CONTRIB-NAME = T_EAREG_F EMPLID = 060187
FR ALIAS T_BESAN_F = N
FR ALIAS T_BEVAN_F = N
FR ALIAS T_BERAN_F = N
CONTRIBUTION ACCT (T_EAREG_F ) FOUND FOR PLAN (TRS )
W-NONTAX-BFT = 30.453846 = 7918.000000 / 260.000000
Optional Form Application Trace OutputAnalysis
This issue has not been reported to Oracle.
Additional Resources
To learn more about PeopleSoft Pension Administration’s implementation of the Simplified Method for computing the Non-Taxable portion of a benefit, see PeopleBooks.
To learn more about the IRS rules pertaining to the Simplified Method, see IRS Publication 525.
Leave a Reply
You must be logged in to post a comment.