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

cboddeposit.app

cboddeposit/cboddeposit.app

Download original file · Bank deposit source contents

1domain cboddeposit;23application xbodDeposit {4    environment develop {5        deploy cboddeposit;6        transactions {7            mode: LOCAL;8            resource: cashRecordsResource;9            ordinaryUpdates: PARALLEL;10        }11    }12    environment testing {13        deploy cboddeposit;14        quantum {15            system: UNIFIED_STORE;16            resource: cashLedger;17        }18    }19}2021requests {22    idempotency retention 3 days;23    duplicateWindow 5 seconds;24}2526header requestContext {27    unique String globalSerialNumber;28    String callerId;29    String requestSerialNumber;30    String callMode;31    String callOrigin;32}3334header responseContext {35    String status(Default = "OK");36}3738tables entities {39    table BANK_ACCOUNTS(BankAccount) {40        primarykey(BankAccount.accountNumber);41    }42}4344tables roles {45    table INTEREST_INCOME_ACCOUNTS(InterestIncomeAccount) {46        primarykey(InterestIncomeAccount.accountNumber);47    }48    table COLLECTION_INCOME_ACCOUNTS(CollectionInterestIncomeAccount) {49        primarykey(CollectionInterestIncomeAccount.accountNumber);50    }51    table PRINCIPAL_RECOVERY_ACCOUNTS(PrincipalRecoveryAccount) {52        primarykey(PrincipalRecoveryAccount.accountNumber);53    }54    table CASH_REVERSAL_POSTINGS(CashReversalPostingLine) {55        primarykey(CashReversalPostingLine.reversal, CashReversalPostingLine.slot);56        foreignkey(CashReversalPostingLine.reversal) references CashReversalAgreement;57    }58    table ACCOUNT_ACCRUAL(DepositAccrualState) {59        primarykey(DepositAccrualState.accountNumber);60    }61    table CASH_POSTINGS(DepositPostingLine) {62        primarykey(DepositPostingLine.deposit, DepositPostingLine.slot);63        foreignkey(DepositPostingLine.deposit) references CashDepositAgreement;64    }65    table DEPOSIT_ACCOUNTS(DepositAccount) {66        primarykey(DepositAccount.accountNumber);67    }68    table CASH_SETTLEMENT_ACCOUNTS(CashSettlementAccount) {69        primarykey(CashSettlementAccount.accountNumber);70    }71    table ACCOUNT_ELIGIBILITY(AccountEligibility) {72        primarykey(AccountEligibility.accountNumber);73    }74    table FEE_RATES(DepositFeeRate) {75        primarykey(DepositFeeRate.customerNumber, DepositFeeRate.tariff);76    }77    table CASH_FAILURES(CashFailureRecord) {78        primarykey(CashFailureRecord.handlingNumber);79        auto CashFailureRecord.handlingNumber prefix "FAILURE";80        snapshot(CashFailureRecord.deposit, CashFailureRecord.reversal);81    }82}8384tables contracts {85    table CASH_DEPOSITS(CashDepositAgreement) {86        snapshot(CashDepositAgreement.postingEvidence);87        primarykey(CashDepositAgreement.depositNumber);88        auto CashDepositAgreement.depositNumber prefix "DEPOSIT";89        foreignkey(CashDepositAgreement.account) references DepositAccount;90        foreignkey(CashDepositAgreement.settlement) references CashSettlementAccount;91        foreignkey(CashDepositAgreement.interestIncome) references InterestIncomeAccount;92        foreignkey(CashDepositAgreement.collectionIncome) references CollectionInterestIncomeAccount;93        foreignkey(CashDepositAgreement.principalRecovery) references PrincipalRecoveryAccount;94    }95    table CASH_REVERSALS(CashReversalAgreement) {96        primarykey(CashReversalAgreement.reversalNumber);97        auto CashReversalAgreement.reversalNumber prefix "REVERSAL";98        foreignkey(CashReversalAgreement.original) references CashDepositAgreement;99    }100}101102scope {103    local(in requestContext, out responseContext) {104        quantum resource(105            cashLedger,106            DepositAccount.interestBase,107            CashSettlementAccount.balance,108            InterestIncomeAccount.balance,109            CollectionInterestIncomeAccount.balance,110            PrincipalRecoveryAccount.balance111        ) settleCashDeposit;112        quantum resource(113            cashLedger,114            DepositAccount.interestBase,115            CashSettlementAccount.balance,116            InterestIncomeAccount.balance,117            CollectionInterestIncomeAccount.balance,118            PrincipalRecoveryAccount.balance119        ) reverseCashDeposit;120        duplicate key(121            DepositAccount.accountNumber,122            CashSettlementAccount.accountNumber123        ) facts(124            DepositRequest,125            CashChannel,126            DepositFeeParty,127            DepositFeeContext,128            AuthorizationEvidence,129            InterestIncomeAccount,130            CollectionInterestIncomeAccount,131            PrincipalRecoveryAccount132        ) window 5 seconds depositCash;133        duplicate key(134            DepositAccount.accountNumber,135            CashDepositAgreement.depositNumber136        ) facts(CashReversalAgreement) window 5 seconds reverseCash;137    }138}139140web {141    expose openBankRepaymentAccounts;142    expose openDepositAccount;143    expose depositCash;144    expose reverseCash;145    expose previewCashReversal;146    expose readDepositAccount;147    expose readCashDeposit;148    expose readCashReversal;149}