Functional Description
Purpose
The purpose of this function is to store new coverage and election changes in cache. This information
will be used to update table F08320WF.
Setup Notes and Prerequisites
Records can be Read, Added, Deleted, or Updated to the cache, depending on Cache Action Code, CACTN,
passed in. The following is a list of the modes used to select cache processing options:
Input
Processing TypeType
============
Cache Get 1
Cache Add 2
Cache Update 3
Cache Delete 4
Cache Delete All 5
Cache Get Next 6
Cache Add/Update 7 (Do Not Use)
Cache End 8
Cache Close Cursor 9
Return errors through Error Message ID, DTAI.
The cache Key is as follows:
JobNumberAKey1 (from next number server X0010)
szBenefitGroupCategoryKey3
szPlanIdKey4
szPlanAdditionalOptionKey5
between a full or a partial fetch. JobNumberAKey1 must always be part of the key.
The Cache Cursor, GENLNG must be past to and from the BSFN.
When adding a record always attempt to Get the record first. If no error is returned then the record
already exists and it cannot be added.
Special Logic
Technical Specifications
include the header file B0800078.h
Declare Variable
IDnJDBReturn;
ID idReturnValue= ER_SUCCESS;
char szErrorID[11];
int iCacheActionCode;
Declare Data Structures
DSD0800078 dsCacheKey;
DSD0800078 dsSaveData;
Declare pointers
HUSER hUser = (HUSER) NULL;
HCACHE hCacheHandle = (HCACHE) NULL;
Check for NULL pointers, if there are null pointers set error '4363'
Begin Main Processing
Initialization Of DS Structure and Save of Workfields
Initialize the Behavior
If an error occurs initializing the behavior and if cSuppressErrorMessage does not = '1' then
set error.
iCacheActionCode=atoi(lpDS->szCacheActionCode);
Initialize the Cache
Call internal function I0800078_InitCache
If no error initializing cache then Process Action code
If iCacheActionCode past in = 1 (Get) then call internal function
I0800078_CacheAdd.
If iCacheActionCode past in = 3 (Update) then call internal function
I0800078_CacheDeleteAll.
If iCacheActionCode past in = 6 (Get Next) then call internal functionI0800078_CacheGetNext.
If iCacheActionCode past in = 7 (Add Update) then call internal function
I0800078_CacheAddUpdate.
If iCacheActionCode past in = 8 (End) then call JDE function
JdeCacheTerminateAll.
If iCacheActionCode past in = 9 (Close Cursor) then call internal
Return value of saved fields after cache processing is completed
szErrorMessageID = szErrorID
mnNumberKeys = mnNumberKeys);
Function Clean Up
Free the Behavior
If the pointer szErrorMessageID is not blank and cSuppressErrorMessage does not = '1' then set error.
Internal functions
Function: I0800078_InitCache
Initialize cache for Benefit Categories
Declare Variables
DSD0800078dsCacheKey;
JDECMINDEXSTRUCTIndex[1];
Main Processing
Initialize output
SzErrorID = ""
Initialize the cache
Setup And Initialize Cache-Keys to Create Cache once
Set Memory, memset(Index, 0x00, sizeof(JDECMINDEXSTRUCT));
Set the number of segments of the key to = '5'
The first segment of the key is mnJobNumberA
Index->CacheKey[0].nOffset = offsetof(DSD0800078, mnJobnumberAKey1);
Index->CacheKey[2].nOffset = offsetof(DSD0800078, mnEnrollmentEventTypeKey2);
Index->CacheKey[3].nOffset = offsetof(DSD0800078, szBenefitGroupCategoryKey3);
Index->CacheKey[4].nOffset = offsetof(DSD0800078, szPlanIdKey4);
Index->CacheKey[5].nOffset = offsetof(DSD0800078, szPlanAdditionalOptionKey5);
Set lphCacheHandle = "B0800078",
If there is an error szErrorID = ERR_INIT_CACHE
Function: I0800078_CacheGet
Declare Variables
JDECM_RESULT jdeCacheCode = JDECM_PASSED;
int iNumberOfKeys;
HJDECURSOR hCursor = (HJDECURSOR) NULL;
DSD0800078dsCacheData;
BOOLbChangedKey;
Main Processing
Initialize output
Set Memory
szErrorID = ""
Initialize Variables
Open the Cursor if error then szErrorID = "ERR_OPEN_CURSOR"
If no error Reset Cursor
If iNumberOfKeys = '0' then Fetch the first record
Else fetch the record matching the keys
If there is an error with the fetch then szErrorID = ERR_FETCH_RECORD
if the Cursor does not = NULL then close the cursor
Function: I0800078_CacheAdd
Declare Variables
ID idCacheCursor;
Initialize output
SzErrorID = ""
Set the cache with the number or keys = mnNumberKeys
Set the cursor = idCacheCursor
Copy the memory needed the size of DSD0800078
Add the record the size of DSD0800078
If Add fails then szErrorID = ERR_ADD_RECORD
Function: I0800078_CacheUpdate
Declare Variables
HJDECURSOR hCursor = (HJDECURSOR) NULL;
DSD0800078dsCacheData;
Initialize output
SzErrorID = ""
Set the cache with the number or keys = mnNumberKeys
Set the cursor = idCacheCursor
Set the memory needed the size of DSD0800078
Fetch the record, if record is found Update the record
If there is an error then szErrorID = ERR_UPDATE_RECORD
Close the Cursor
Function: I0800078_CacheDelete
Declare Variables
JDECM_RESULT jdeCacheCode = JDECM_PASSED;
int iNumberOfKeys;
HJDECURSOR hCursor = (HJDECURSOR) NULL;
Main Processing
Initialize Variables
SzErrorID = ""
Set the cache with the number or keys = mnNumberKeys
If Number Of Keys = 0 Then call internal function I0800078_CacheDeleteAll
else
Initialize the cursor
Set the memory the size of DSD0800078
Fetch the record
If fetch is successful then delete the record
If there is an error deleting then szErrorID = ERR_DELETE_RECORD
If there is an error fetching then szErrorID = ERR_FETCH_RECORD
Close the cursor
Function: I0800078_CacheDeleteAll
Declare Variables
JDECM_RESULT jdeCacheCode = JDECM_PASSED;
int iNumberOfKeys;
HJDECURSOR hCursor = (HJDECURSOR) NULL;
Main Processing
Initialize input and output
SzErrorID = ""
Copy the memory needed the size of DSD0800078
Set the cache with the number or keys = mnNumberKeys
Open the Cursor
Delete all records
If there is an error on delete then szErrorID = ERR_DELETE_RECORD
Close Cursor
Function: I0800078_CacheGetNext
Notes:Assumption is made this function will be performed until the
Cache Index is no longer equal to the input index. If this function is prematurely ended, the cursor
will have to be closed using function I0800078_CloseCursor, or memory leaks will result from the
cursor being left open.
Declare Variables
JDECM_RESULTjdeCacheCode = JDECM_PASSED;
intiNumberOfKeys;
BOOLbMatchKey=FALSE;
BOOLbChangedKey;
HJDECURSOR hCursor = (HJDECURSOR) NULL;
DSD0800078dsCacheData;
ID idCacheCursor;
Main Processing
Initialize output
SzErrorID = ""
Set the memory needed the size of DSD0800078
Initialize Variables
Set the cache with the number or keys = mnNumberKeys
Set cursor for either initial fetch or subsequent fetches
If idCacheCursor = 0L then this is a subsequent search
Open Cursor
Fetch the Next record
If idCacheCursor <> 0L fetch the first record
If the fetch was successful
If the keys do not match then szErrorID = ERR_FETCH_RECORD
set idCacheCursor = 0L
Function: I0800078_CacheAddUpdate
DO NOT USE THIS FUNCTION
Function: I0800078_CloseCursor
Declare Variables
If idCacheCursor does not equal 0L then close cursor
Set idCacheCursor = 0L
Function: I0800078_ChangedKey
Test to see if the key matches the key in cache
If it has changed then bChangedKey = True
Else
bChangedKey = FALSE;
End of Internal functions
D0800078 - Caching for Benefits Enrollment
Parameter Name | Data Item | Data Type | Req/Opt | I/O/Both |
---|---|---|---|---|
mnJobnumberAKey1 | JOBS | MATH_NUMERIC | REQ | INPUT |
The job number (work station ID) which executed the particular job. | ||||
mnEnrollmentEventTypeKey2 | EVET | MATH_NUMERIC | OPT | BOTH |
A field that indicates the event during which the enrollment occurs. Valid values include:
1 Open Enrollment
2 Enrollment for current plan
| ||||
szBenefitGroupCategoryKey3 | SBGR | char | OPT | BOTH |
The category of a benefit group. The category is used to group benefit plans according to the type and/or rule. For
| ||||
szPlanIdKey4 | PLAN | char | OPT | BOTH |
An abbreviation or number that identifies a specific employee benefit. Examples are:
o Employee Health Insurance
o Accidental Death
| ||||
szPlanAdditionalOptionKey5 | AOPT | char | OPT | BOTH |
A code that identifies any additional options available for a benefit plan that have been defined in the Plan Additional Options table
| ||||
cSelection001 | SL01 | char | OPT | BOTH |
A code used to prompt detail selection from a list of items. Typically, the legitimate selection codes are explained at the bottom of the
| ||||
mnDeductionAmtRate | DRTM | MATH_NUMERIC | OPT | BOTH |
The value of this field is either a percentage, a dollar amount or an hourly rate depending upon where it is being used;
A When used in
| ||||
mnBenefitAmtRate | BRTM | MATH_NUMERIC | OPT | BOTH |
The value of this field is either a percentage, a dollar amount or an hourly rate depending upon where it is being used.
When used in
| ||||
mnPlanCost | PCOS | MATH_NUMERIC | OPT | BOTH |
The cost that the system calculates for a plan or plan option. | ||||
mnPlanCredit | PCRE | MATH_NUMERIC | OPT | BOTH |
The credit that the system calculates for a plan or plan option. | ||||
szErrorMessageID | DTAI | char | OPT | OUTPUT |
A code that identifies and defines a unit of information. It is an alphanumeric code up to 8 characters long that does not allow blanks or
| ||||
idCacheCursor | GENLNG | ID | REQ | BOTH |
General purpose ID variable. | ||||
szCacheActionCode | CACTN | char | REQ | INPUT |
A code that indicates the activity you want to perform. Valid codes:
o Get - Retrieve the cache element
o Add - Add a cache element
o
| ||||
mnNumberKeys | NKEYS | MATH_NUMERIC | REQ | INPUT |
The number of keys in an index that will be used to retrieve, delete, or update a record. | ||||
cSuppressErrorMessage | SUPPS | char | OPT | INPUT |
A flag indicating whether or not runtime error messaging will occur when an error message is issued from a business function.
0 = allow
| ||||
mnSequenceNumberView | SEQ# | MATH_NUMERIC | OPT | BOTH |
A number used to sequence information for review purposes only. | ||||
cSelectionChangedFlag | EV01 | char | OPT | INPUT |
An option that specifies the type of processing for an event. | ||||
szPlanandOptionDesc50 | DS50 | char | OPT | BOTH |
A descriptive statement of up to 50 characters in length. | ||||
mnTrackPCPNumberFlag | PCPF | MATH_NUMERIC | OPT | BOTH |
An option that specifies whether the benefit plan or benefit plan option tracks primary care physician numbers. If you choose this option,
| ||||
mnEmployeeFlexCost | EEFC | MATH_NUMERIC | OPT | BOTH |
The amount of flex credits given to an employee by the employer when the employee chooses the benefit plan. | ||||
cDepBen | DBEN | char | OPT | BOTH |
A code that indicates whether the person is a dependent or a beneficiary of the employee. Valid codes are:
D
The person is a
|
None |
None |