Analyse the below information  For API and find out list of questions and gaps in the informaion
Objective
The purpose of the Get GRS Withdrawal Policy API is to retrieve the data stored on the withdrawal db2 tables.  It will display the current state on the Salesforce UI for the rules a sponsor wants applied to member withdrawal requests.  The rules will be applied to member in-service and termination withdrawal requests.  The solution requires new withdrawal db2 tables to store the data.  Consumers of this API will be plan set-up users on Salesforce and the Shamrock squad.

:bar_chart: Success metrics
 

Goal

Metric

Build one API incrementally for withdrawal policy.

Assign policy types Vesting, Locking, Restricted and Allowed.  Each will be tested independently.

Assign a new function code for Withdrawal Inquiry.

All policy types with the latest effective date will be retrieved.

Current date, past date and future date rules can be retrieved.

SF UI will need rules in effect today and any future dated rules for amendments.

Shamrock will need rules for in-service withdrawals using a current date and rules for terminations using a date in the past that corresponds to when the member terminated.

Date is optional in the request.

When provided, it is the rule in effect on or before the date provided.

When not provided, will return rule for the latest effective date which could be a future date. 

Contract is optional in the request.

When not provided, will return all contracts.

A list of contracts can be requested.

:thinking: Assumptions
The data initially loaded to the new withdrawal db2 tables is accurate.

 

:thinking: Risks
The suspension monitoring policy will exist in 2 places: Payroll Admin on global.com and Withdrawal Inquiry db2 tables.. Accepting the risk the policy may be out of sync and not match in both places.

 

:star2: DB2 Tables
Nine new db2 tables were created for withdrawal inquiry purposes.  The policy configuration from existing GRS_POL_T and GRS_POL_CNTRCT_T using function code “Withdrawal Inquiry”retrieves the withdrawal policy configuration from the following tables:

GRS_WTHDR_POL_T

GRS_WTHDR_VEST_POL_CNTRCT_T

GRS_WTHDR_LOCK_POL_CNTRCT_T

GRS_WTHDR_DCPP_CNTRCT_T

GRS_WTHDR_PNSN_CNTRCT_T

GRS_WTHDR_POL_CNTRCT_T

GRS_WTHDR_RESTRN_T

GRS_WTHDR_CONSQNCE_T

GRS_WTHDR_POL_CONSQNCE_CNTRCT_T

Screen Table Model: Withdrawals Concept Model Working Copy.vsdx (sharepoint.com)

 

Data mapping for the Salesforce Withdrawal Inquiry Save API can be found here: SalesforceWithdrawalInquiry_SaveAPI_ DataMapping.xlsx

Each policy type has a source code value.  The source code value determines what data is expected.  

ST = Standard, defined in BRMS with most API values null

CU = Custom, custom text must be provided

SC = Screen Configured, data updated on Salesforce UI and most data populated

 

 

:notepad_spiral: Requirements
Requirement

User Story

Jira Issue

Notes

Get vesting policy details

Retrieve data saved on the withdrawal db2 tables for the sponsor vesting policy for a given date. 

DT-392: 'Get' Withdrawals: Vesting (happy path - data configured)
DONE
 

Each contract will have 5 separate rows for different employment status types.

Applies to DCPP, DPSP and EPSP products.

Get locking policy details

Retrieve data saved on the withdrawal db2 tables for the sponsor locking policy for a given date. 

DT-463: 'Get' Withdrawals: Locking (happy path - data configured)
DONE
 

 Each contract will have 5 separate rows for different employment status types.

Locking shares exceptions with Vesting and both need to be in sync.

Locking rules only apply to DCPP products.

Get restrictions policy details

Retrieve data saved on the withdrawal db2 tables for the sponsor restrictions policy for a given date. 

DT-483: 'Get' Withdrawals: Restrictions (happy path - data configured)
DONE
 

Every client must have a restriction rule.

Standard is no restrictions.

Get consequences policy details

Retrieve data saved on the withdrawal db2 tables for the sponsor consequences policy for a given date. 

DT-492: 'Get' Withdrawals: Consequences (happy path - data configured)
DONE
 

Maximum of 10 consequential contracts.

Standard is no consequences.

Applies to money that is not restricted.

Includes configuration for Fund Options.

:art: User interaction and design
 

Container

Save Withdrawal Policy API is part of the Service Offering Control container in SwaggerHub.  Link: grs-ws-service-offering | Sun-Life-Financial | SwaggerHub      

The link will take you to the latest published version.

 

Source Code Location: 

https://bitbucket.sunlifecorp.com/projects/GRS/repos/grs-ws-service-offering/browse

 

Authentication/Authorization Details

grs-ws-service-offering - DEV
Access Token URL - https://dev-okta-oauth.sunlife.com/oauth2/aus776w4qr7BmnawR1d7/v1/token
CLIENT-ID - 0oa776w4s6UI3NXHP1d7
CLIENT-SECRET - V2CONhRjyozpuC1Zg5J6SfhOtpG4ZzGo4Uaj1sUd
SCOPE - sponsors-serviceoffering.all.uad

  

grs-ws-service-offering - SIT
Access Token URL - https://uat-okta-oauth.sunlife.com/oauth2/aus7f7hk4buxu1lps1d7/v1/token
CLIENT-ID - 0oa7f7j1s4QP2ODlR1d7
CLIENT-SECRET - IDhPeZfxtDJN6jJmUaAUjJ_dMIVDZrr0qnblxMgY
SCOPE - sponsors-serviceoffering.all.uad

 

Endpoint URL

/policies/contracts/withdrawal/searches

 

Request/Response Format

Validate_Get_Sponsor_Vesting_Withdrawal_Policy.xml

 

Status Codes

200 - Standard success response

400 - Bad request, generic / unknown error

401 - Unauthorized, authentication information is not provided, user must log in

500 - Internal server error, a generic error indication for an unexpected server execution problem

503 - Service unavailable, server is temporarily not available (e.g. due to overload), client retry recommended

 

Error Codes

Error codes:
"ERR01960001", "ERR01960002", "ERR01960004", "ERR01966004"

Notifications for error codes:

notifications": [
        {
            "code": "ERR01960002",
            "message": "Bad Request:: Client Id is invalid.",
            "description": "The request has an invalid business identifier",
            "timestamp": "2023-01-12T08:36:53.881"
        }

"notifications": [
        {
            "code": "ERR01960002",
            "message": "Bad Request:: Plan Id is invalid.",
            "description": "The request has an invalid business identifier",
            "timestamp": "2023-01-12T08:38:44.445"
        }
    ]

"notifications": [
        {
            "code": "ERR01960004",
            "message": "500: Internal Server Error.",
            "description": "Unexpected Error has Occurred",
            "timestamp": "2023-01-12T08:38:44.445"
        }
    ]

"notifications": [
        {
            "code": "ERR01960001",
            "message": "500: Internal Server Error.",
            "description": "Unexpected Error has Occurred",
            "timestamp": "2023-01-12T08:38:44.445"
        }
    ]
notifications": [
        {
            "code": "ERR01966004",
            "description": "Jwt token in authorization header expired",
            "message": "AUTH_TOKEN_EXPIRED",
            "timestamp": "2023-01-12T15:26:53.782+0000"
        }
    ]