Banking Industry - Default Account Marking Business Process
Card Default Account Marking Business Process
This is for those who had problems understanding a generic default account marking business process. I had a problem understanding the same, so I came up with a visual that helped a lot.
Business rules:
Rule 1:
At any time only 1 account can be marked as "O"
Rule 2:
If there is a "O" type account in one category then no "Y" type account is required in that category
Rule 3:
If there is a "Y" type account in one category then all other accounts should be of "N" type.
Following is the simple code for the above flow.
Hope this helps.
This is for those who had problems understanding a generic default account marking business process. I had a problem understanding the same, so I came up with a visual that helped a lot.
Business rules:
Rule 1:
At any time only 1 account can be marked as "O"
Rule 2:
If there is a "O" type account in one category then no "Y" type account is required in that category
Rule 3:
If there is a "Y" type account in one category then all other accounts should be of "N" type.
Following is the simple code for the above flow.
private void ApplyRulesEx(DataTable dtAtmCards) { //Pseudo: //STEP 1: Demark old account status to N //STEP 2: Mark the new account status to O or Y // bool bStatus = false; try { string strRequestCategory = m_strCategory;//"10";// string strRequestAccountNumber = m_strAccountNumber;//"0949011001576";// string strRequestMarkAs = m_strFlagToBeMarked; //"Overall Default";// //mark as O, overall default for (int nRowNumber = 0; nRowNumber < dtAtmCards.Rows.Count; nRowNumber++) { //1. Parse through each db record, get the status and category //2. if dbCategory = requestCategory) then mark all O and Y's as N //3. Else, its a different category, so mark all O as Y. // make it default for that type only //4. Send string dbAccountStatus = dtAtmCards.Rows[nRowNumber]["Default_Account"].ToString(); if (dbAccountStatus.Equals("")) dbAccountStatus = "Non Default"; string dbAccountNumber = dtAtmCards.Rows[nRowNumber]["Account_No"].ToString(); string dbAccountCategory = dtAtmCards.Rows[nRowNumber]["Account_Type"].ToString(); if (dbAccountCategory == strRequestCategory) { if (dbAccountNumber == strRequestAccountNumber) { //the request account status change is same as the current overall default account. //Lets change that directly. Only one call to phoenix. //this means, that the requested account number and category is same as //the db account number and category, so, no need to send any "N" statuses, //lets do nothing. and break; CLogger.getInstance().Log("Try marking account: [" + dbAccountNumber + ":" + dbAccountCategory + "] as: [" + strRequestMarkAs + "]", System.Diagnostics.TraceLevel.Info); bStatus = MarkAs(strRequestMarkAs, dbAccountCategory, dbAccountNumber); } else { //2. if dbCategory = requestCategory) then mark all O and Y's as N //means, the requested category is same as the this account's category, //so this means if the current db status is overall or yes, //we need to make it N if (dbAccountStatus == AccountStatuses.Overall || dbAccountStatus == AccountStatuses.Yes) { //Make it "N", which means No. CLogger.getInstance().Log("Try marking account: [" + dbAccountNumber + ":" + dbAccountCategory + "] as: [" + AccountStatuses.No.ToString().Substring(0, 1).ToString() + "]", System.Diagnostics.TraceLevel.Info); bStatus = MarkAs(AccountStatuses.No.ToString().Substring(0, 1), dbAccountCategory, dbAccountNumber); } } } else { //3. else, its a different category, so mark all O as Y. // make it default for that type only if (dbAccountStatus == AccountStatuses.Overall) { //Change any overall status from Overall to Yes, send Y. Static/hardcoded. //TODO: Put Y in app.config for ready change. CLogger.getInstance().Log("Try marking account: [" + dbAccountNumber + ":" + dbAccountCategory + "] as: [" + "Y" + "]", System.Diagnostics.TraceLevel.Info); bStatus = MarkAs("Y", dbAccountCategory, dbAccountNumber); } } } } catch (Exception exc) { CLogger.getInstance().Error("CAccountHandler", "ApplyRules", exc.Message); } }
Hope this helps.