Employee Accounts that receive periodic adjustments for investment returns may experience negative rates of return. The Employee Account can be configured with an Interest Method supported by a Table Lookup Alias for the Interest Rate (Investment Return).
However, negative Table Lookup Alias results and negative Interest Rates are not supported. The negative rate from the Lookup Table is treated as a positive value, and a positive interest credit is computed.
Issue
The Table Lookup Alias module (PAPUALTL) resolves the negative interest rate in the table as a positive value. Even if the Table Lookup Alias issue is resolved, the Cash Balance/Employee Accounts module (PAPCABAL) and Cash Balance/Employee Accounts User Exit module (PACXABAL) are also not properly set up to handle a negative interest rate.
The cause of the issue is that several variables defined in the COBOL programs are not properly set up to be signed values.
Module | Variable |
PAPUALTL.cbl | TL-2ND-COL-DEC-VAL |
PAPUALTL.cbl | TL-3RD-COL-DEC-VAL |
PAPCABAL.cbl | W-INT-RATE |
PACXABAL.cbl | USER-INTEREST-RAT |
Use Case
The system can be configured to compute Cash Balance and Employe Account interest, but periods with negative interest rates are not correctly computed. Negative interest rates may be applicable when the interest rate is derived based on investment returns.
Replicate
The following steps can be used to replicate the issue.
Include a negative interest rate in your interest rate table:
Set up a Table Lookup Alias to retrieve the investment return interest rate:
Configure an Interest Method that uses the Table Lookup Alias:
Finally, set up an Employee Account definition and Function Result that uses the Interest Method:
Run the Periodic Process for a member with the specified Employee Account.
Review the Employee Accounts Application Trace to see that the Table Lookup Alias resolved incorrectly to a positive interest rate.
COMPUTING INTEREST USING (T_ACCTV_IM)
SETTING FLAGS FOR FULL PERIOD
FULL PERIOD INTEREST - FRACTION IS ( 1.000000)
PROGRAM GENERATED LOOKUP VALUE 1 = 2020-06-30
TL ALIAS T_VOL_TL = 4.090000
USING TIME AWARE TABLE LOOKUP - LOOKUP VALUE (- 4.090000FOR INTEREST RATE (- 0.04090
PROGRAM GENERATED LOOKUP VALUE 1 = 2020-06-30
TL ALIAS T_VOLDT_TL = 2019-06-30
[26849] USING TABLE LOOKUP (T_VOLDT_TL) FOR BALANCE AS OF DATE (2019-06-30)
[26849] RETRIEVE BALANCE - PRE-TAX ( 16677.950000)
COMPUTING SIMPLE INTEREST ( 682.120000)
INTEREST ADJUSTED FOR PAYBCD ( 682.120000)
Employee Accounts Application Trace OutputConfirm the Employee Account results to see that a positive interest credit was added to the account incorrectly.
Workaround
There is no workaround to enable negative interest rates or investment returns.
Solution
This issue can be resolved with COBOL programming changes to the Table Lookup Alias module (PAPUALTL), the Cash Balance/Employee Accounts module (PAPCABAL), and Cash Balance/Employee Accounts User Exit module (PACXABAL)module. Certain variables need to be updated to accommodate a signed value.
01 W-TABLES-FOR-LOOKUP.
03 W-MAX-TSFL-COL-CNT PIC 9(4) COMP VALUE 1000.
03 W-MAX-TSFL-TBL-CNT PIC 9(4) COMP VALUE 100.
03 W-TFL-TBL-CNT PIC 9(4) COMP VALUE 0.
03 W-HLD-ROW-CNT PIC 9(4) COMP.
03 W-LOOKUP-TABLES OCCURS 100 TIMES
INDEXED BY TSFLIDX.
05 W-TL-TBL-NAME PIC X(18).
05 W-TL-TBL-ROW-CNT PIC 9(4) COMP.
05 W-TL-TBL-YCYCL-NUM PIC 9(4) COMP.
05 W-TL-TBL-VAL-COLS OCCURS 1000 TIMES
INDEXED BY COLIDX
COLIDXLO
COLIDXHI.
NOCLN 07 TL-1ST-COL.
NOCLN 09 TL-1ST-COL-DEC-VAL PIC 9(9)V9(6).
NOCLN 09 TL-1ST-COL-DATE-VAL PIC X(10).
NOCLN 07 TL-2ND-COL.
******************************************************************
* 01/05/2023 MWT - Mark Tomsheck, PSPA Tech Inc. *
* DT-00247 PSPA Tech (DT) Modified Code *
* Support Negative Table Lookup Result and *
* Negative Account Interest Rate. *
* *
NOCLN * 09 TL-2ND-COL-DEC-VAL PIC 9(9)V9(6).
NOCLN 09 TL-2ND-COL-DEC-VAL PIC S9(9)V9(6).
* 01/05/2023 MWT - Mark Tomsheck - End Change *
******************************************************************
NOCLN 09 TL-2ND-COL-DATE-VAL PIC X(10).
NOCLN 09 TL-2ND-COL-CHAR-VAL PIC X(01).
NOCLN 07 TL-3RD-COL.
******************************************************************
* 01/05/2023 MWT - Mark Tomsheck, PSPA Tech Inc. *
* DT-00247 PSPA Tech (DT) Modified Code *
* Support Negative Table Lookup Result and *
* Negative Account Interest Rate. *
* *
NOCLN * 09 TL-3RD-COL-DEC-VAL PIC 9(9)V9(6).
NOCLN 09 TL-3RD-COL-DEC-VAL PIC S9(9)V9(6).
* 01/05/2023 MWT - Mark Tomsheck - End Change *
******************************************************************
NOCLN 09 TL-3RD-COL-DATE-VAL PIC X(10).
NOCLN 09 TL-3RD-COL-CHAR-VAL PIC X(01).
COBOL – PAPUALTL.cbl 01 W-MISC-AREA.
02 W-ORIG-PROCESS-MODE PIC X(1).
88 W-ORIG-CALC VALUE 'N'.
02 W-PRIOR-ADJUSTMENT-FLAG PIC X(1) VALUE 'N'.
88 W-PRIOR-ADJUST-FOUND VALUE 'Y'.
88 W-PRIOR-ADJUST-NOT-FOUND VALUE 'N'.
02 W-HISTORY-END-DATE PIC X(10).
02 W-LAST-BAL-DATE PIC X(10).
02 W-LAST-BAL-ALIGN-DATE PIC X(10).
02 W-NEXT-BAL-ALIGN-DATE PIC X(10).
02 W-NEXT-AS-OF-DATE PIC X(10).
02 W-HOLD-AMOUNT PIC S9(07)V9(06).
02 W-HOLD-INTEREST PIC S9(07)V9(10).
02 W-HOLD-ADJUST PIC S9(03)V9(10).
02 W-INTEREST-NAME PIC X(10).
02 W-INT-FRAC PIC 9(02)V9(06).
02 W-PART-FRAC PIC 9(02)V9(06).
02 W-MAX-HISTORY PIC 9(04).
******************************************************************
* 01/05/2023 MWT - Mark Tomsheck, PSPA Tech Inc. *
* DT-00247 PSPA Tech (DT) Modified Code *
* Support Negative Table Lookup Result and *
* Negative Account Interest Rate. *
* *
* 02 W-INT-RATE PIC 9(02)V9(10).
02 W-INT-RATE PIC S9(02)V9(10).
* 01/05/2023 MWT - Mark Tomsheck - End Change *
******************************************************************
02 W-START-SUB PIC 9(04) COMP.
02 W-THRESHOLD PIC 9(11) COMP.
02 W-CREDIT-RATE1 PIC 9(03)V9(06).
02 W-CREDIT-RATE2 PIC 9(03)V9(06).
COBOL – PAPCABAL.cbl 05 USER-EXIT-PARAMETERS.
10 USER-CODE-TYPE PIC X(02).
88 USER-CREDIT-TYPE VALUE 'AA'.
88 USER-CREDIT-RATES VALUE 'AB'.
88 USER-CR-THRESHOLD VALUE 'AC'.
88 USER-CREDIT-MIN VALUE 'AD'.
88 USER-CREDIT-MAX VALUE 'AE'.
88 USER-PARTIAL-FLAGS VALUE 'AF'.
88 USER-INTEREST-RATE VALUE 'AG'.
10 USER-PASSED-VALUES.
15 W-USER-EARNINGS PIC S9(07)V9(06).
10 USER-RETURNED-VALUES.
15 USER-RC PIC 9(02).
88 USER-RC-OK VALUE 0.
15 USER-CREDIT PIC S9(07)V9(06).
15 USER-CR-RAT1 PIC 9(03)V9(06).
15 USER-CR-RAT2 PIC 9(03)V9(06).
15 USER-CR-THRESHOLD-VAL PIC 9(11) COMP.
15 USER-CREDIT-MIN-VAL PIC S9(07)V9(06).
15 USER-CREDIT-MAX-VAL PIC S9(07)V9(06).
15 USER-INTEREST-FLAG PIC X(01).
88 USER-INTEREST-YES VALUE 'Y'.
88 USER-INTEREST-NO VALUE 'N'.
15 USER-INTEREST-TYPE PIC X(01).
88 USER-INTEREST-SIMPLE VALUE 'S'.
88 USER-INTEREST-COMPOUND VALUE 'C'.
******************************************************************
* 01/05/2023 MWT - Mark Tomsheck, PSPA Tech Inc. *
* DT-00247 PSPA Tech (DT) Modified Code *
* Support Negative Table Lookup Result and *
* Negative Account Interest Rate. *
* *
* 15 USER-INTEREST-RAT PIC 9(02)V9(06).
15 USER-INTEREST-RAT PIC S9(02)V9(06).
* 01/05/2023 MWT - Mark Tomsheck - End Change *
******************************************************************
COBOL – PACXABAL.cblUpdating interest-related fields in Application Designer to support negative (signed) values may also be a good idea. These fields have been identified:
- ACCUM_POST_TAX_INT
- ACCUM_PRE_TAX_INT
- BALANCE_INT_RATE
- CREDIT_INT_RATE
- INTEREST_RATE
- POST_TAX_DED_INT
- PRE_TAX_DED_INT
For example:
Resolution
After the proposed fix is installed and compiled, the Table Lookup Alias for the negative interest rate is correctly resolved, and the correct interest credit is computed when Employee Account is processed.
The Application Trace output shows that the correct interest rate is resolved by the Table Lookup Alias:
COMPUTING INTEREST USING (T_ACCTV_IM)
SETTING FLAGS FOR FULL PERIOD
FULL PERIOD INTEREST - FRACTION IS ( 1.000000)
PROGRAM GENERATED LOOKUP VALUE 1 = 2020-06-30
TL ALIAS T_VOL_TL = - 4.090000
USING TIME AWARE TABLE LOOKUP - LOOKUP VALUE (- 4.090000FOR INTEREST RATE (- 0.04090
PROGRAM GENERATED LOOKUP VALUE 1 = 2020-06-30
TL ALIAS T_VOLDT_TL = 2019-06-30
[26849] USING TABLE LOOKUP (T_VOLDT_TL) FOR BALANCE AS OF DATE (2019-06-30)
[26849] RETRIEVE BALANCE - PRE-TAX ( 16677.950000)
COMPUTING SIMPLE INTEREST (- 682.120000)
INTEREST ADJUSTED FOR PAYBCD (- 682.120000)
Employee Accounts Application Trace OutputAnalysis
This issue has not been reported to Oracle.
Leave a Reply
You must be logged in to post a comment.