cboddeposit-80-bank-qualification.spp
cboddeposit/admission/cboddeposit-80-bank-qualification.spp
Download original file · Bank deposit source contents
1domain cboddeposit;23// CSAQRY1 9704/9709: decoded account and operator facts, with business selection in SPP.45Role DepositBankProfile {6boolean normalSavings;7boolean restrictedSubtype;8String openingBranch;9String openingProvince;10String subbranch;11String area;12String areaProvince;13String depositRange;14String proprietaryRange;15boolean cardLinked;16String accountSeries;17boolean cardRecordFound;18String cardLoss;19String cardStatus;20String passbookLoss;21boolean groupSubaccount;22}2324Role DepositOperatorFacts {25String branch;26String province;27String subbranch;28String area;29String areaProvince;30boolean accountingCentre;31String transactionPrefix;32String operationCode;33String tellerFamily;34int tellerNumber;35boolean numericTeller;36String mode;37boolean agencySigned;38boolean corporateTransfer;39String settlementChannel;40}4142Role DepositNotices {43String cardWarning;44String passbookWarning;45}4647atomic calculate assessDepositDocumentNotices(48DepositBankProfile,49DepositOperatorFacts,50CashChannel,51DepositNotices52) {53DepositNotices.cardWarning = "";54DepositNotices.passbookWarning = "";55boolean applies = !DepositOperatorFacts.agencySigned56&& DepositOperatorFacts.numericTeller57&& (DepositOperatorFacts.mode == "Online"58|| DepositOperatorFacts.mode == "Mode8");59if (applies) {60if (DepositBankProfile.accountSeries == "49927"61&& DepositBankProfile.cardLinked62&& DepositBankProfile.cardRecordFound63&& CashChannel.businessCode != "CR0"64&& (DepositBankProfile.cardLoss == "Oral"65|| DepositBankProfile.cardLoss == "Written")66&& DepositBankProfile.cardStatus != "Cancelled") {67DepositNotices.cardWarning = "WN200";68}69if (DepositBankProfile.passbookLoss == "Oral" || DepositBankProfile.passbookLoss == "Written") {70DepositNotices.passbookWarning = "WN201";71}72}73}7475atomic check checkDepositBranchRange(DepositBankProfile, DepositOperatorFacts, CashChannel) {76boolean specificPermission = DepositOperatorFacts.transactionPrefix == "FL06002"77|| DepositOperatorFacts.transactionPrefix == "AG02891"78|| DepositOperatorFacts.transactionPrefix == "SA01120"79|| DepositOperatorFacts.transactionPrefix == "FL06615"80|| DepositOperatorFacts.transactionPrefix == "FL06618";81boolean commonException = DepositOperatorFacts.transactionPrefix == "RE04081"82|| DepositOperatorFacts.transactionPrefix == "RE04082"83|| DepositOperatorFacts.transactionPrefix == "RE04001"84|| DepositOperatorFacts.transactionPrefix == "RE04013"85|| DepositOperatorFacts.transactionPrefix == "RE04047"86|| DepositOperatorFacts.transactionPrefix == "RE04057"87|| DepositOperatorFacts.transactionPrefix == "CR05220";88boolean agencyException = CashChannel.businessCode == "AG0"89&& (DepositOperatorFacts.operationCode == "1732"90|| DepositOperatorFacts.operationCode == "1762"91|| DepositOperatorFacts.operationCode == "1725");92boolean outerException = DepositOperatorFacts.transactionPrefix == "RE04001"93|| DepositOperatorFacts.transactionPrefix == "RE04013"94|| DepositOperatorFacts.transactionPrefix == "RE04047"95|| DepositOperatorFacts.transactionPrefix == "RE04057"96|| DepositOperatorFacts.transactionPrefix == "RE04067"97|| DepositOperatorFacts.transactionPrefix == "AG01765"98|| DepositOperatorFacts.transactionPrefix == "AG02899"99|| DepositOperatorFacts.transactionPrefix == "RE04066";100boolean specialTeller = DepositOperatorFacts.tellerFamily == "UH"101&& DepositOperatorFacts.tellerNumber >= 0102&& DepositOperatorFacts.tellerNumber <= 9;103if ((DepositOperatorFacts.operationCode == "1751"104|| DepositOperatorFacts.operationCode == "1176"105|| DepositOperatorFacts.operationCode == "1172")106&& DepositOperatorFacts.tellerFamily == "O"107&& DepositOperatorFacts.tellerNumber >= 56108&& DepositOperatorFacts.tellerNumber <= 99) {109specialTeller = true;110}111if (DepositOperatorFacts.operationCode == "1751"112&& DepositOperatorFacts.tellerFamily == "ZD"113&& DepositOperatorFacts.tellerNumber >= 0114&& DepositOperatorFacts.tellerNumber <= 9) {115specialTeller = true;116}117boolean applies = !DepositBankProfile.cardLinked118&& CashChannel.businessCode != "FL0"119&& CashChannel.businessCode != "RE0"120&& CashChannel.businessCode != "AG0"121&& (!DepositOperatorFacts.accountingCentre122|| DepositBankProfile.openingProvince != DepositOperatorFacts.province)123&& !outerException124&& !specificPermission125&& !specialTeller;126boolean groupException = DepositBankProfile.groupSubaccount127&& (DepositOperatorFacts.settlementChannel == "HVP"128|| DepositOperatorFacts.settlementChannel == "BEP"129|| DepositOperatorFacts.settlementChannel == "NXY");130boolean checksRange = DepositOperatorFacts.mode != "CentralBatch"131&& !DepositOperatorFacts.corporateTransfer132&& DepositOperatorFacts.transactionPrefix != "CR05220"133&& !groupException;134if (applies) {135if (DepositBankProfile.normalSavings) {136require(137DepositBankProfile.depositRange == "SameBranch"138|| DepositBankProfile.depositRange == "Subbranch"139|| DepositBankProfile.depositRange == "City"140|| DepositBankProfile.depositRange == "Province"141|| DepositBankProfile.depositRange == "All",142"INVALID_DEPOSIT_RANGE"143);144if (checksRange) {145if (DepositBankProfile.depositRange == "SameBranch"146&& DepositBankProfile.openingBranch != DepositOperatorFacts.branch147&& !commonException) {148require(false, "EN134");149}150if (DepositBankProfile.depositRange == "Subbranch") {151require(152DepositBankProfile.subbranch != null153&& DepositBankProfile.subbranch != ""154&& DepositOperatorFacts.subbranch != null155&& DepositOperatorFacts.subbranch != "",156"DEPOSIT_SUBBRANCH_RELATION_NOT_FOUND"157);158require(DepositBankProfile.subbranch == DepositOperatorFacts.subbranch, "EN470");159}160if (DepositBankProfile.depositRange == "City") {161require(162DepositBankProfile.area != null163&& DepositBankProfile.area != ""164&& DepositOperatorFacts.area != null165&& DepositOperatorFacts.area != "",166"DEPOSIT_AREA_NOT_FOUND"167);168require(DepositBankProfile.area == DepositOperatorFacts.area, "EN470");169}170if (DepositBankProfile.depositRange == "Province") {171require(172DepositBankProfile.areaProvince != null173&& DepositBankProfile.areaProvince != ""174&& DepositOperatorFacts.areaProvince != null175&& DepositOperatorFacts.areaProvince != "",176"DEPOSIT_AREA_NOT_FOUND"177);178require(DepositBankProfile.areaProvince == DepositOperatorFacts.areaProvince, "EN470");179}180}181} else {182if ((DepositBankProfile.proprietaryRange == "SameBranch"183|| DepositBankProfile.proprietaryRange == "WithdrawOnly")184&& DepositBankProfile.openingBranch != DepositOperatorFacts.branch185&& DepositOperatorFacts.mode != "CentralBatch"186&& !DepositOperatorFacts.corporateTransfer187&& !commonException188&& !(DepositBankProfile.restrictedSubtype189&& agencyException)) {190require(false, "EN134");191}192}193}194// This subtype check is outside the outer range gate in the source.195if (DepositBankProfile.restrictedSubtype196&& DepositBankProfile.openingBranch != DepositOperatorFacts.branch197&& !agencyException198&& !commonException199&& DepositOperatorFacts.transactionPrefix != "AG01765"200&& DepositOperatorFacts.transactionPrefix != "AG02899"201&& DepositOperatorFacts.transactionPrefix != "RE04066"202&& DepositOperatorFacts.transactionPrefix != "RE04035"203&& !specificPermission) {204require(false, "EN134");205}206}207208atomic calculate mergeDepositNotices(AdmissionDecision, DepositNotices) {209if (AdmissionDecision.executable210&& (DepositNotices.cardWarning != ""211|| DepositNotices.passbookWarning != "")) {212AdmissionDecision.status = AdmissionStatus.WARNING;213}214}215216// KSADEP0:603 and CSAQRY1 5000/9751/9753. Reversal uses its own eligibility path.217218atomic check checkCoreDepositReversalEligibility(219CashAccountControl,220AccountEligibility,221DepositOperatorFacts222) {223require(AccountEligibility.status != AccountStatus.CLOSED, "EO082");224require(CashAccountControl.cancelledOn == 0, "EN113");225require(226AccountEligibility.status != AccountStatus.FROZEN227|| DepositOperatorFacts.transactionPrefix == "SA01116",228"EN111"229);230}231232atomic check checkDepositOperatorBinding(DepositOperatorFacts, DepositFeeContext) {233require(234DepositOperatorFacts.branch == DepositFeeContext.branchNumber235&& DepositOperatorFacts.area == DepositFeeContext.regionCode,236"DEPOSIT_OPERATOR_CONTEXT_MISMATCH"237);238require(239DepositOperatorFacts.operationCode == "1102" && DepositOperatorFacts.transactionPrefix == "SA01102",240"UNSUPPORTED_DEPOSIT_OPERATOR_PATH"241);242}