S++Business systems language
DEMO SOURCE · SPP / APP / PHYRead the book

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